バナー画像

Fileクラスはプログラミングの中でも特に重要性が高く、アプリやシステム開発には必須と言えるクラスです。

もちろんWebサイト構築にも必ず使われていると言っても良いほど使用頻度の高いクラスでもあります。

Fileクラスを使用することでファイルの読み込み/書き込みや削除/複製などファイル関連の操作が可能になります。

今回の記事ではそんなFileクラスの使い方について解説していきます。

Fileクラスとは

名前の通りファイルやディレクトリに関する全ての操作を行うクラスです。

Fileクラスには作成や複製・削除はもちろん、属性の操作や確認などファイルおよびディレクトリにまつわるメソッドが沢山ありますが、これらのメソッドを使用する為にはまずFileクラスをインポートする必要が有ります。宣言は以下の通りです。

import java.io.File;

また、Fileクラスの記述ルールは次のようになります。

File file = new File(引数);

引数にはファイル名及びディレクトリ名やパスなどが入ります。

新規作成

ファイルの新規作成にはcreateNewFileメソッドは使用します。
createNewFileメソッドでファイルを作成する場合には以下のように記述します。

File file = new File("ファイル名");     // インスタンスの引数にはファイル名を指定
file.createNewFile();

また同じようにディレクトリの新規作成にはmkdirメソッドを使用します。
mkdirメソッドでの記述は以下の通りです。

File dir = new File("ディレクトリ名");     // インスタンスの引数にはディレクトリ名を指定
dir.mkdir();
ポテパンダの一言メモ

mkdirメソッドとmkdirsメソッド
同じようなメソッドでmkdirsメソッドというものがあります。
ディレクトリを作成する際に該当ディレクトリの親ディレクトリすら存在していない場合にはコンパイルエラーとなります。このような場合にはmkdirsメソッドを使うことで親ディレクトリもまとめて作成することが出来ます。

では実際にファイルを新規作成するまでの流れをコードで見てみましょう。

import java.io.File;
import java.io.IOException;

public class testClass {
	
	public static void main(String[] args) throws IOException {
		
		File file = new File("test.txt");
		
		try {
			if (file.createNewFile()) {
				System.out.println("ファイル作成に成功しました。");
			} else {
				System.out.println("ファイル作成に失敗しました。");
			}
		} catch(IOException e) {
			System.out.println(e);
		}
		
	}

}

このコードではFileクラスのオブジェクトを作成しCreateNewFileメソッドでファイルを新規作成しています。インスタンスの引数には”test.txt”を指定している為、実行ファイルと同階層に「test.txt」というファイルが作成されます。

削除

不要なファイルを削除するには、Fileクラスのdeleteメソッドを使用します。
deleteメソッドも記述ルールはcreateNewFileメソッドと同じです。

File file = new File("ファイル名");     // インスタンスの引数にはファイル名を指定
file.delete();

ディレクトリを削除する場合には、引数にディレクトリ名を指定するだけです。

ファイルに書き込む

ファイルに文字列を書き込む際には二つのクラスを使用します。一つ目はFileWriterクラス、もう一つはPrintWriterクラスです。これらのクラスを使用するにはクラスをインポートする必要があります。

import java.io.FileWriter;
import java.io.PrintWriter;

二つのクラスは次のように記述します。

FileWriter file = new FileWriter("ファイル名");     // インスタンスの引数にはファイル名を指定
PrintWriter pw = new PrintWriter(new BufferedWriter(file));

実際にファイルに書き込む際にはprintlnメソッドを使用します。

PrintWriter println(“書き込む文字列”);

ファイルへ書き込む方法としては「上書き」と「追記」の二つがありますが、追記の場合にはFileWriterクラスの引数に「true」を指定するだけです。まずは次のコードを見てください。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class testClass {
 
    public static void main(String[] args) throws IOException {
        try {
        	File file = new File("test.txt");	// Fileオブジェクトの作成
        	
        	// 1 PrintWriterオブジェクトを作成
        	// 2 FileWriterオブジェクトをBufferedWriterでラッピング
        	// 3 バッファリングしてからPrintWriterでファイルへ出力
        	PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
        	
        	//文字列を出力
        	pw.println("a");
        	pw.println("b");
        	pw.println("c");
        	
        	pw.close();		// ファイルを閉じる
        } catch (IOException e) {
        	System.out.println(e);
        }
    }

}

このコードでは、インスタンスを生成し、次にPrintWriterクラスの宣言をしています。

そしてそのPrintWriterクラスの引数にBufferedWriterクラスでラッピングしたFileWriterクラスを指定することで、最終的にBufferedWriterクラスでバッファリングしたものをPrintWriterクラスで出力するという流れになっています。

なぜこのような流れにしているかについては、PwintWriterクラスは実行されると直ちにストリームへの出力をするため、BufferedWriter でラップしバッファリングすることが推奨されているからです。

またこのコードではFileWriterクラスの引数に「true」を指定している為、追記モードになっていることが分かります。最終処理としてcloseメソッドでファイル処理のリソースを開放することを忘れないようにしましょう。

ファイルを読み込む

FileReaderクラスを使用することでファイルを読み込むことが出来ます。

FileReaderクラスを使用する際の注意点としては、”FileNotFoundException”という例外が発生する可能性があるため、必ず例外処理を忘れないようにしてください。

FileReaderクラスを使ったコードは次のように記述します。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class testClass {
 
    public static void main(String[] args) throws IOException {
    	try {
    		File file = new File("test.txt");
    		FileReader filereader = new FileReader(file);
    		int ch;
    		while((ch = filereader.read()) != -1){
    			System.out.print((char)ch);
    		}   
    	} catch(FileNotFoundException e) {
    		System.out.println(e);
   	} catch(IOException e) {
   		System.out.println(e);
   	}
    }

}

readメソッドは1文字読み込むと自動でポインタが次のターゲットに移ります。この習性を利用する為、Whileでread処理を繰り返します。最後の文字になるとreadメソッドは-1を返してくるので処理はここで止まるというわけです。

またwhileの中ではprintlnではなく敢えてprintを使用しています。これはprintlnを使うことで1文字ずつ改行されてしまうのを防ぐためです。printメソッドは最後の文字が処理された場合においても改行文字すら表示しようとするので自動的に改行されます。

ファイルをコピーする

コピーの方法についてはいくつかありますが、ここではJDK7以降で追加された”New I/O 2(NIO2)”というAPIを使った方法をご紹介します。

NIO2のFileクラスを使用する為のクラスインポートは忘れないようにしてください。それでは次のコードを見てみましょう。

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws IOException {
        
        String spa = FileSystems.getDefault().getSeparator();
         
        try {
            Path sourcePath = Paths.get("." + spa + "test.txt");
            Path targetPath = Paths.get("." + spa + "sample" + spa + "test.txt");
            Files.copy(sourcePath, targetPath);
         
            System.out.println("コピーが成功しました");
         
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

このコードでは、指定したファイルを別のディレクトリにコピーしています。
このようにcopyメソッドを使うと、コピー元のファイルパスとコピー先のファイルパスを指定するだけで簡単にコピーを実行することが出来ます。

またコピー先に同名のファイルが存在する場合に上書きコピーする方法としては、copyメソッドにオプションで「StandardCopyOption.REPLACE_EXISTING」を指定するだけで大丈夫です。

存在を確認する

ファイルの存在を確認する為にはexistsメソッドを使用します。
このメソッドも記述方法はcreateNewFileメソッドと一緒です。

File file = new File("ファイル名");     // インスタンスの引数にはファイル名を指定
file.exists();

Fileクラスの処理はファイルが存在しない場合、例外(FileNotFoundException)が発生します。Fileクラスのメソッドを使用する際には必ず事前にexistsメソッドでファイルの有無を確認する癖をつけるようにしましょう。

ポテパンダの一言メモ

アクセス権限に注意!
existsメソッドは、仮にファイルが存在してもアクセス権限が無いと”false”を返すので注意しましょう。

まとめ

今回はFileクラスについて説明しました。

Fileクラスはどの言語においても頻繁に使うことになるクラスです。プログラミングを覚える中でこのクラスを外して考えることはまずあり得ませんので、完全に理解するまで何度も繰り返して構築し、色々なパターンを練習することを強くお勧めします。

またこの他の方法でもまだまだやり方は無数にありますので、どの方法が一番処理速度が速いのかなどの学習もしてみると面白いかもしれません。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。