Java7・8でどのような機能が追加されたのかを確認中です。
今回は「Files」についてです。
FilesはJava7から追加されたファイル入出力のクラスで、従来の書き方に比べてすっきりした書き方ができます
また、Java8ではFilesをStreamで処理することもでき、メモリ負荷を抑えられるようです。
Java8にもなったんだからFiles使おう
https://qiita.com/nishemon/items/a96cb6e14161f3ca8ee4
Filesを用いたファイル書き込みについては以下で触れられています。
java.nio.file.Filesでファイルを書いたり読んだり。
https://qiita.com/shiro01/items/6d9c0c90a9971c530526
私の方でも、ファイル読み込みについて、Java6の書き方(FileInputStream)・Java7の書き方(Files)・Java8の書き方(FilesのStream)を試してみました。
やっぱりFilesを使うとすっきりしますね。
【入力ファイル】
・test1.txt
hoge
fuga
piyo
【テストコード】
package lesson1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class Main2 {
public static void main(String[] args) {
System.out.println("Java6の書き方");
try{
File file = new File("C:\\tmp\\test1.txt");
BufferedReader br = new BufferedReader
(new InputStreamReader
(new FileInputStream(file),"UTF-8"));
String str = br.readLine();
while(str != null){
System.out.println(str);
str = br.readLine();
}
br.close();
}catch(IOException e){
System.out.println(e);
}
System.out.println("Java7の書き方");
try{
Path path = Paths.get("C:\\tmp\\test1.txt");
BufferedReader br = Files.newBufferedReader(path,StandardCharsets.UTF_8);
String str = br.readLine();
while(str != null){
System.out.println(str);
str = br.readLine();
}
br.close();
}catch(IOException e){
System.out.println(e);
}
System.out.println("Java8の書き方");
Path path = Paths.get("C:\\tmp\\test1.txt");
try (Stream<String> stream = Files.lines(path, StandardCharsets.UTF_8)) {
stream.forEach(line -> {
System.out.println(line);
});
} catch (IOException e) {
System.out.println(e);
}
}
}
【コンソール】
Java6の書き方
hoge
fuga
piyo
Java7の書き方
hoge
fuga
piyo
Java8の書き方
hoge
fuga
piyo
-------------------------
なお、性能に関しては、FilesよりもFileInputStreamの方が良いらしいです。
ファイル読み込みは何がベストなのか(Java)
https://qiita.com/motoki1990/items/755c1b0c8d12b49b0c77