Java java.nio.file.Files readAllLines()メソッド
readAllLines()このメソッドはファイルからすべての行の内容を読み取り、それをList<String>として返します。
readAllLines()このメソッドには2つのオーバーロードされたバージョンがあります:
public static List<String> readAllLines(Path path) throws IOException public static List<String> readAllLines(Path path, Charset cs) throws IOException
最初のバージョンはデフォルトの文字セット(UTF-8)を使用してファイルを読み取り、2番目のバージョンは文字セットを指定できます。
パラメータの説明
Path path
- 型:
java.nio.file.Path - 説明:読み取るファイルのパスオブジェクト
- 例:
Path filePath = Paths.get("example.txt");
Charset cs(オプションのパラメータ)
- 型:
java.nio.charset.Charset - 説明:ファイルの内容をデコードするための文字セット
- 一般的な文字セット:
StandardCharsets.UTF_8StandardCharsets.ISO_8859_1StandardCharsets.US_ASCII
- 例:
Charset charset = StandardCharsets.UTF_8;
戻り値
- 型:
List<String> - 説明:ファイルのすべての行を含むリスト。各要素はファイル内の1行を表します
- 注意:
- 行区切り文字(例:
\n或\r\n)は返される文字列には含まれません - ファイルが空の場合、空のリストを返します
- リストの順序はファイル内の行の順序と一致します
- 行区切り文字(例:
例外処理
readAllLines()このメソッドは以下の例外をスローする可能性があります:
IOException- I/O エラーが発生した場合(ファイルが存在しないなど)SecurityException- ファイルにアクセスする十分な権限がない場合
使用時に例外処理を行うことをお勧めします:
例
try {
List<String> lines = Files.readAllLines(path);
// 読み取った内容を処理
} catch (IOException e) {
e.printStackTrace();
// 例外状況を処理
}
List<String> lines = Files.readAllLines(path);
// 読み取った内容を処理
} catch (IOException e) {
e.printStackTrace();
// 例外状況を処理
}
使用例
例1:基本的な使い方
例
import java.nio.file.*;
import java.util.List;
public class ReadFileExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath);
// ファイルの内容を出力
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("ファイルの読み取りエラー: " + e.getMessage());
}
}
}
import java.util.List;
public class ReadFileExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath);
// ファイルの内容を出力
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("ファイルの読み取りエラー: " + e.getMessage());
}
}
}
例2:文字セットを指定
例
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class ReadFileWithCharset {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath, StandardCharsets.UTF_8);
// ファイルの内容を処理
lines.forEach(System.out::println);
} catch (IOException e) {
System.err.println("ファイルの読み取りエラー: " + e.getMessage());
}
}
}
import java.nio.charset.StandardCharsets;
import java.util.List;
public class ReadFileWithCharset {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath, StandardCharsets.UTF_8);
// ファイルの内容を処理
lines.forEach(System.out::println);
} catch (IOException e) {
System.err.println("ファイルの読み取りエラー: " + e.getMessage());
}
}
}
注意事項
- ファイルサイズ:このメソッドはファイル全体を一度にメモリに読み込むため、非常に大きなファイル(数百MBを超えるファイルなど)の処理には適していません
- 文字エンコーディング:正しい文字セットを使用するようにしてください。そうしないと文字化けが発生する可能性があります
- 行末記号:異なるオペレーティングシステムは異なる行末記号を使用します(Windows は
\r\n、Unix/Linux は\n)、しかしreadAllLines()はこれらの違いを正しく処理します - パフォーマンスの考慮:大きなファイルの場合は、
BufferedReaderとlines()メソッドを使用したストリーム処理を検討してください
代替案
大きなファイルを処理する必要がある場合は、以下の代替方法を検討できます:
例
try (Stream<String> stream = Files.lines(path)) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
この方法はストリーム処理を使用するため、ファイル全体を一度にメモリに読み込むことはありません。
まとめ
Files.readAllLines()はシンプルで使いやすいメソッドであり、小さなテキストファイルの読み取りに適しています。ファイルのすべての行の内容を取得する便利な方法を提供しますが、大きなファイルを処理する場合はメモリ消費の問題に注意する必要があります。実際のニーズに応じて適切なファイル読み取り方法を選択することで、プログラムの効率と安定性を大幅に向上させることができます。
Java java.nio.file.Files