Javaでのファイル操作は、プログラムが外部のデータを読み書きする際に非常に重要です。ファイル操作を行うためには、Javaの標準ライブラリに含まれるいくつかのクラスを使用します。この記事では、Javaでファイルを扱うための基本的な方法を完全かつ包括的に解説します。
1. Javaでファイルを扱う基本クラス
Javaでは、ファイルの操作を行うためにいくつかのクラスがあります。最も一般的に使用されるクラスは以下の通りです。

- Fileクラス: ファイルやディレクトリに関する情報を提供し、基本的な操作(作成、削除、存在確認など)を行います。
- FileReader / FileWriterクラス: テキストファイルを読み書きするために使用されます。
- BufferedReader / BufferedWriterクラス: ファイルの読み書きを効率的に行うためのクラスで、バッファリングを使用してパフォーマンスを向上させます。
- FileInputStream / FileOutputStreamクラス: バイナリデータを読み書きするためのストリームクラスです。
- Pathクラス: Java NIO(New I/O)の一部で、ファイルパスの操作を簡便に行うためのクラスです。
2. ファイルの読み書き方法
2.1 Fileクラスによるファイル操作
File
クラスは、ファイルやディレクトリを操作するための最も基本的なクラスです。このクラスを使うことで、ファイルの存在確認や、ファイルの作成・削除を行うことができます。
javaimport java.io.File;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {
File file = new File("example.txt");
// ファイルが存在するか確認
if (file.exists()) {
System.out.println("ファイルが存在します。");
} else {
try {
// ファイルを作成
if (file.createNewFile()) {
System.out.println("新しいファイルが作成されました。");
} else {
System.out.println("ファイルの作成に失敗しました。");
}
} catch (IOException e) {
e.printStackTrace();
}
}
// ファイルの削除
if (file.delete()) {
System.out.println("ファイルが削除されました。");
} else {
System.out.println("ファイルの削除に失敗しました。");
}
}
}
2.2 FileReaderとFileWriterを使ったテキストファイルの読み書き
テキストファイルを読み書きするためには、FileReader
とFileWriter
を使用します。FileReader
はファイルから文字データを読み取り、FileWriter
は文字データを書き込みます。
javaimport java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderWriterExample {
public static void main(String[] args) {
try {
// ファイルに書き込む
FileWriter writer = new FileWriter("example.txt");
writer.write("こんにちは、Java!");
writer.close();
// ファイルを読み込む
FileReader reader = new FileReader("example.txt");
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3 BufferedReaderとBufferedWriterを使った効率的なファイル読み書き
BufferedReader
とBufferedWriter
は、ファイル操作を効率的に行うためのクラスです。特に大きなファイルを扱う場合にパフォーマンスが向上します。
javaimport java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderWriterExample {
public static void main(String[] args) {
try {
// バッファリングでファイルに書き込む
BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"));
writer.write("こんにちは、Java!");
writer.close();
// バッファリングでファイルを読み込む
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.4 ファイルのバイナリ読み書き(FileInputStream / FileOutputStream)
バイナリデータを読み書きするためには、FileInputStream
とFileOutputStream
を使用します。これらのクラスは、画像や音声ファイル、その他のバイナリファイルの読み書きに使用されます。
javaimport java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputOutputStreamExample {
public static void main(String[] args) {
try {
// バイナリデータを書き込む
FileOutputStream outputStream = new FileOutputStream("example.dat");
outputStream.write(65); // ASCIIコードで 'A'
outputStream.close();
// バイナリデータを読み込む
FileInputStream inputStream = new FileInputStream("example.dat");
int data = inputStream.read();
System.out.println((char) data); // 'A'が出力される
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. Java NIO(New I/O)を使ったファイル操作
Java NIO(New I/O)は、Java 7以降で導入された新しいI/Oライブラリで、より効率的なファイル操作を提供します。Path
クラスを使うと、ファイルパスの操作が非常に簡単になります。
javaimport java.nio.file.*;
public class NIOExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
// ファイルを作成
try {
Files.createFile(path);
System.out.println("ファイルが作成されました。");
// ファイルに書き込む
Files.write(path, "こんにちは、Java NIO!".getBytes());
// ファイルを読み込む
String content = new String(Files.readAllBytes(path));
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. ファイルの削除や移動
Javaでは、Files
クラスを使ってファイルの削除や移動も簡単に行えます。
javaimport java.nio.file.*;
public class FileOperationsExample {
public static void main(String[] args) {
Path source = Paths.get("example.txt");
Path target = Paths.get("new_example.txt");
try {
// ファイルを移動
Files.move(source, target);
System.out.println("ファイルが移動されました。");
// ファイルを削除
Files.delete(target);
System.out.println("ファイルが削除されました。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 終わりに
Javaでのファイル操作は非常に多岐に渡りますが、基本的なクラスを理解することで、ほとんどのファイル操作は簡単に行うことができます。ファイルの読み書きに関しては、テキストファイルやバイナリファイルに対応したクラスを適切に選び、必要に応じてバッファリングを利用することが大切です。また、Java NIOを使えば、さらに効率的なファイル操作が可能になります。
ファイル操作はシステムに重要な影響を与えるため、エラー処理やリソース管理に十分注意して実装を行うようにしましょう。