Javaの入出力(I/O)の基本的な概念
バイトストリーム
バイナリデータの読み書きに使用される。InputStreamとOutputStreamが基底クラス。
主なクラスとインタフェースは以下。
FileInputStream/FileOutputStream
ファイルをバイナリで読み書きするためのストリーム。
BufferedInputStream/BufferedOutputStream
バッファリングを行うことでI/O効率を向上させる。
DataInputStream/DataOutputStream
データストリームで、プリミティブ型のデータを扱うためのストリーム。
DataInputStream/DataOutputStream
文字ストリーム
テキストデータの読み書きに使用される。ReaderとWriterが基底クラス。
主なクラスとインタフェースは以下。
FileReader/FileWriter
テキストファイルを読み書きするためのストリーム。
ObjectInputStream/ObjectOutputStream
オブジェクトのシリアライズとデシリアライズを行うためのクラス。
シリアライズとデシリアライズ
シリアライズ: オブジェクトを保存・転送可能なバイナリ形式に変換するプロセス。
デシリアライズ: 保存・転送されたバイナリ形式のデータを元のオブジェクトに復元するプロセス。
I/Oの基本的な操作
ファイルの読み込み
BufferedReaderは、ファイルから行単位でテキストを読み込むために使用される。
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ファイルへの書き込み
BufferedWriterを使って、テキストをファイルに書き込むことができる。
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class FileWriteExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Hello, World!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
エラーハンドリングの必要性
I/O操作は多くの例外を投げる可能性があり、特にIOExceptionは頻繁に例外が発生するため、例外処理が非常に大事になる。
標準入力と標準出力
標準入力と標準出力を使ってコンソールでデータをやり取りできる。
標準入力
System.inを利用して、ユーザーからの入力を取得。
Scannerクラスを使うと便利。
import java.util.Scanner;
public class StandardInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("名前を入力してください:");
String name = scanner.nextLine();
System.out.println("こんにちは、" + name + "さん!");
}
}
標準出力
System.outを利用してデータを表示。
System.out.printfを使うとフォーマット指定が可能。
public class StandardOutputExample {
public static void main(String[] args) {
int age = 25;
System.out.printf("年齢: %d歳\n", age);
}
}
リソースの自動解放
Java7以降ではtry-with-resourcesを使用してI/Oリソースを自動的に解放できる。
import java.io.*;
public class TryWithResourcesExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}