導入
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アプリケーションのデータ処理ができるようになります。