技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

java:今さらながらJava7・8新機能について調べてみた(Files)

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

 
java.io VS java.nio どっちが速い?ファイル読み込み - やまろうのプログラミングTips

https://code.yamarou.com/java-io-vs-java-nio/