導入
Javaでは、ファイルの読み書きやコンソール入力を簡単に行う方法が用意されています。本記事では、Javaを使ったデータ入出力について、基礎から具体的なコード例までをわかりやすく解説します。
Javaのストリームについて
Javaでは、ストリームを使ってデータを扱います。ストリームはデータの流れを抽象化したもので、大きく分けて以下の2種類があります:
-
文字ストリーム: テキストデータの読み書きに使います。
ReaderとWriterクラスを使います。 -
バイトストリーム: バイナリデータ(画像、音声など)の読み書きに使います。
InputStreamとOutputStreamクラスを使います。
文字ストリームはテキストデータに、バイトストリームはバイナリデータに適しています。
コンソールでのデータ入出力
コンソール(画面)でのデータのやり取りには、標準入力(キーボード入力)、標準出力(画面表示)、標準エラー出力(エラー表示)があります。
キーボードからの入力を読む
キーボードからの入力は、Scannerクラスを使うのが一般的です。
import java.util.Scanner;
public class SampleIO {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("名前を入力してください: ");
String name = scanner.nextLine();
System.out.println("こんにちは、" + name + "さん!");
scanner.close();
}
}
この例では、Scannerを使ってキーボード入力を取得し、それを画面に表示しています。
画面に文字を出力する
画面に文字を出すには、System.outを使います。これはPrintStreamというオブジェクトで、様々な形式で出力できます。
public class SampleConsoleOutput {
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.printf("私の年齢は %d 歳です。\n", 30);
}
}
System.out.printlnは指定した文字を改行付きで出力し、System.out.printfはフォーマット指定子を使って出力します。
エラーメッセージを出す
エラーメッセージはSystem.errを使います。System.errもPrintStreamのオブジェクトです。
public class SampleConsoleError {
public static void main(String[] args) {
System.err.println("エラー: システムでエラーが発生しました。");
}
}
エラーメッセージを表示する際に便利です。
ファイルの入出力
ファイルの読み書きには、文字ストリームとバイトストリームを使う方法があります。ここではその方法を紹介します。
ファイルからデータを読む
ファイルからデータを読むには、FileReader(文字ストリーム)またはFileInputStream(バイトストリーム)を使います。例として、BufferedReaderを使ってファイルを行ごとに読む方法を示します。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class SampleFileRead {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("java.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
BufferedReaderを使うと、ファイルの内容を効率よく読み取れます。
ファイルにデータを書く
ファイルにデータを書くには、FileWriter(文字ストリーム)またはFileOutputStream(バイトストリーム)を使います。ここでは、BufferedWriterを使って文字をファイルに書く例を示します。
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class SampleFileWrite {
public static void main(String[] args) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("out-java.txt"));
bw.write("メッセージです。");
bw.newLine();
bw.write("Javaによってテキストを出力します。");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
BufferedWriterを使うと、効率的に文字データを書き込めます。
Filesクラスを使ったファイル操作(Java 7以降)
Java 7以降では、Filesクラスを使うと簡単にファイル操作ができます。
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.io.IOException;
import java.util.List;
public class SampleFiles {
public static void main(String[] args) {
// ファイルにデータを書く
try {
Files.write(Paths.get("file-output.txt"), "ファイルです。\n2行目の内容です。".getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}
// ファイルからデータを読む
try {
List<String> lines = Files.readAllLines(Paths.get("file-output.txt"));
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Files.writeは文字列のバイト配列をファイルに書き込み、Files.readAllLinesはファイルの全行をリストとして読み込みます。
終わりに
この記事では、Javaを使ったコンソールやファイルの入出力について説明しました。
-
コンソール入出力:
Scanner、System.out、System.errを使います。 -
ファイルの入出力:
FileReader、FileWriter、BufferedReader、BufferedWriter、およびFilesクラスを使います。 -
例外処理: 入出力操作中のエラーを
try-catchで処理します。
これらの基本を押さえることで、実用的なJavaアプリケーションのデータ処理ができるようになります。