Java SE 7のjava.nio.file.Filesがとても便利な件

とても便利。
たとえば、あるサイトからHTMLをダウンロードしてファイルに保存する場合。

try(InputStream is = new URL("http://www.google.com/").openStream()){
    Files.copy(is, Paths.get("C:\\Users\\kishida\\Downloads\\google.html"));
}


ファイルの内容を一行ずつ読み込んで処理をする場合。

for(String s : Files.readAllLines(Paths.get("C:\\Install.log"), Charset.defaultCharset())){
    System.out.println(s);
}

まあ、直接文字列でファイルパスを渡せなかったり、デフォルトCharset使う場合でも引数が省略できなくて、まだるっこいコードになってしまうところは、あいかわらずJavaらしいけど。


あと、あるパス以降のディレクトリを全部たどってファイルを処理する場合。

Files.walkFileTree(Paths.get("C:\\Users\\kishida\\Desktop"), new SimpleFileVisitor<>(){
    @Override
    public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) throws IOException {
        Path p = (Path) file;
        System.out.println(p.toString());
        return super.visitFile(file, attrs);
    }
});


ということで、「Javaってファイル扱うのにこんなめんどいコードが必要なのにRuby/Groovy/Scalaなら一発!」みたいなコード比較で、ちょっとだけJava側の行数が減ります。
ほかにもFilesクラスのメソッド眺めてみると楽しいと思います。