Java ではファイルのデータを読み書きする方法がいくつかあるようです。
ファイルから ASCII データを読み取りたいのですが、可能な方法とその違いは何ですか?
ベストアンサー1
小さなファイルを読み取る私のお気に入りの方法は、BufferedReader と StringBuilder を使用することです。これは非常にシンプルで要点を押さえた方法です (特に効果的ではありませんが、ほとんどの場合に十分です)。
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
Java 7以降ではリソースを試す(自動クローズなど) 機能:
try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}
このような文字列を読み取る場合、通常は行ごとに何らかの文字列処理を実行したいので、この実装を選択します。
ただし、実際にファイルを文字列に読み込みたい場合には、常にApacheを使用します。コモンズIOクラスの IOUtils.toString() メソッドを使用します。ソースはここで確認できます:
http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html
FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}
Java 7 ではさらに簡単になります。
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}