Javaにはさまざまなファイル処理を行うFileクラスがあります。
この記事ではFileクラスの使い方について、
- Fileとは
- ファイルを新規に作成する
- ファイルリストを取得する
- ファイル名を変更する
- ファイルを読み込む方法
- ファイルに書き込む方法
- ファイルをコピーする方法
- ファイルを移動する方法
- ファイルの読み込み・書き込み可否の判定
- ディレクトリ・ファイルの存在を確認する
- 絶対パスと相対パス
- ファイルを削除する
- ファイルを閉じる
などのFileクラスの基本的な解説から、応用的な使い方を解説しています。
今回はそんなFileクラスの使い方についてわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
Fileクラスとは
Fileクラスは、ファイルやディレクトリを作成したり、ファイルのチェック処理、読み込み・書き込み処理など、ファイルに関するさまざまな操作を行います。
Fileクラスは、コンストラクタの引数にパスやディレクトリ・ファイル名を指定することで、オブジェクトを生成します。
File file = new File(String);
String:ファイルパスやディレクトリを指定します。例)File(“c:¥¥tmp¥¥java.txt”)
Fileクラスを使用するには「import java.io.File」のパッケージを指定します。Javaの開発で、何かしらのファイルを扱う機会は多いと言えますので、この機会にぜひFileクラスの基本的な使い方を覚えておきましょう!
ファイルを新規に作成する
ファイルを新規に作成するためには、FileクラスのcreateNewFileメソッドを使用します。
以下にcreateNewFileメソッドを使用した、ファイルを作成する方法を記述します。
import java.io.File; import java.io.IOException; class Main{ public static void main(String[] args) throws IOException{ File file = new File("/Users/Shared/java/java.txt"); //createNewFileメソッドを使用する if (file.createNewFile()){ System.out.println("ファイル作成成功"); }else{ System.out.println("ファイル作成失敗"); } } }
サンプルでは、ファイルのオブジェクト生成時にコンストラクタの引数にディレクトリ”/Users/Shared/java/“とファイル名”java.txt”を指定しています。
作成したFileクラスのオブジェクトに対してcreateNewFileメソッドを使用しています。これで指定したディレクトリ”/Users/Shared/java/“に、指定したファイル”java.txt”が作成されます。
ファイル作成については、以下の記事で詳しく解説しています。
ファイルリストを取得する
FileクラスのlistFilesメソッドは、指定したディレクトリに含まれるファイルやディレクトリを配列として返します。
public File[] listFiles()
listFilesメソッドを使用すれば、Fileクラスのオブジェクト配列に、ディレクトリやファイルを一覧として取得することができます。
主に指定したパスの中身を調べたいときに使用します。listFilesメソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
ファイル名を変更する
ファイル名を変更するには、renameToメソッドをつかいます。
renameTo(File)
引数Fileには、移動先となるFileクラスのオブジェクトを指定します。renameToメソッドはboolean型を返します。
サンプルコードで確認しましょう。
import java.io.File; public class Main { public static void main (String[] args) { File fileIn = new File("/Users/Shared/java/javaIn.txt"); File fileOut = new File("/Users/Shared/java/javaOut.txt"); if (fileIn.renameTo(fileOut)) { System.out.println("変更しました"); } else { System.out.println("変更に失敗しました"); } } }
実行結果:
変更しました
このサンプルコードでは、renameToメソッドを使ってファイル名を変更しています。
まず、Fileクラスのコンストラクタの引数で変更前のファイル名を指定し、オブジェクトを作成します。次に、変更後のファイル名でFileクラスのオブジェクトを作成します。
そして、変更前のFileクラスのオブジェクトからrenameToメソッドを呼び出し、その引数に変更後のFileクラスのオブジェクトを指定することでファイル名を変更することができます。
ファイルを移動する方法
renameToメソッドを使ってファイルを移動することもできます。ファイル名を同じにして、フォルダ名を変更することで移動することになります。
サンプルコードで確認しましょう。
import java.io.File; public class Main { public static void main (String[] args) { File fileIn = new File("/Users/Shared/java/javaIn.txt"); File fileOut = new File("/Users/Shared/tmp/javaIn.txt"); if (fileIn.renameTo(fileOut)) { System.out.println("移動しました"); } else { System.out.println("移動に失敗しました"); } } }
実行結果:
移動しました
ファイルを読み込む方法
JavaではFileReaderクラスやFileInputStreamクラスを使ってファイルを読み込みます。FileReaderクラスやFileInputStreamクラスの使い方については、こちらで詳しく解説しています。
ぜひ参考にしてください。
ファイルに書き込む方法
JavaではFileWriterクラスやFileOutputStreamクラスを使ってファイルへ書き込みます。FileWriterクラスやFileOutputStreamクラスの使い方については、こちらで詳しく解説しています。
ぜひ参考にしてください。
ファイルをコピーする方法
Javaでファイルをコピーする方法はいくつかありますが、ファイル自体を簡単にコピーできるメソッドは存在しません。Java6でファイルをコピーする基本的な方法として、Fileクラスを使う方法とFileChannelクラスを使う方法の2種類があります。
また、Java7で新しく追加されたFilesクラスを使う方法もあります。これらの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
ファイルの読み込み・書き込み可否の判定
ファイルの読み込み可否判定
対象のファイルが正常に読み込めるか確認するためには、FileクラスのcanReadメソッドを使用します。
canReadメソッドは、boolean型の値を返します。
public boolean canRead()
以下にcanReadメソッドを使用した、ファイル読み込み可否の方法を記述します。
import java.io.File; public class Main { public static void main (String[] args) { File file = new File("/Users/Shared/java/java.txt"); //ファイルの読み込み可否判定 if (file.canRead()){ System.out.println("読み込み可能です"); }else{ System.out.println("読み込み不可です"); } } }
実行結果:
読み込み可能です
サンプルでは指定したディレクトリのファイルが読み込み可能ですので、canReadメソッドがtrueを返しています。指定したファイルが存在しなかったり、拡張子がファイル形式の拡張子以外の場合は、falseを返します。
ファイルの書き込み可否判定
対象のファイルが正常に書き込めるか確認するためには、FileクラスのcanWriteメソッドを使用します。
canWriteメソッドは、boolean型の値を返します。
public boolean canWrite()
以下にcanWriteメソッドを使用した、ファイル書き込み可否の方法を記述します。
import java.io.File; public class Main { public static void main (String[] args) { File file = new File("/Users/Shared/java/java.txt"); //ファイルの書き込み可否判定 if (file.canWrite()){ System.out.println("書き込み可能です"); }else{ System.out.println("書き込み不可です"); } } }
実行結果:
書き込み可能です
サンプルでは指定したディレクトリのファイルが書き込み可能ですので、canWriteメソッドがtrueを返しています。ファイルが読み込み専用だったり、指定したファイルが存在しなかった場合は、falseを返します。
ディレクトリ・ファイルの存在を確認する
指定したディレクトリやファイルが存在するか確認するためには、Fileクラスのexistsメソッドを使用します。
existsメソッドは、boolean型の値を返します。
public boolean exists()
以下にexistsメソッドを使用した、ファイルの存在を確認する方法を記述します。
import java.io.File; public class Main { public static void main (String[] args) { File file = new File("/Users/Shared/java/java.txt"); //ディレクトリ、ファイルの存在を確認する if (file.exists()){ System.out.println("存在します"); }else{ System.out.println("存在しません"); } } }
実行結果:
存在します
サンプルでは指定したディレクトリにファイルが存在しますので、existsメソッドがtrueを返しています。ディレクトリの存在確認を行う場合は、Fileオブジェクト生成時にディレクトリを指定します。
絶対パスと相対パス
Fileクラスのオブジェクト生成時に指定する引数のパスは、絶対パス及び相対バス、両方の指定が可能です。絶対パスと相対パスを指定する方法は、以下の記事で詳しく解説しています!
ファイルを削除する
Fileクラスには、ファイルを削除するためのメソッドも用意されています。ファイルを削除する方法は、以下の記事で詳しく解説しています!
ファイルを閉じる
Javaでファイルを読み込み、書き込みなどの処理が終了したら、必ずcloseメソッドでファイル処理を終了する必要があります。closeメソッドを使用することで、ファイル処理のために確保されていたリソース(メモリ、ファイルディスクリプタ)などが解放されます。
以下にcloseメソッドの基本的な使い方を記述します。
// ファイル書き込み準備処理 FileWriter file = new FileWriter("/Users/Shared/java/java.txt"); PrintWriter pw = new PrintWriter(new BufferedWriter(file)); /* 〜ファイル書き込み処理〜 */ //書き込みが完了したら、必ずファイルオブジェクトをクローズする pw.close();
ファイルの書き込み処理〜ファイルクローズの一連の処理の詳細については、以下の記事で詳しく解説しています!
まとめ
ここでは、Fileクラスを使用した、基本的な処理について説明しました。
ファイルを扱う処理は、さまざまな場面で使用することがあると思います。もし、Fileクラスの使い方を忘れてしまったら、この記事を思い出してくださいね!