2016年10月1日土曜日

Pathの機能(ファイルのコピー) 

みなさん。 こんにちは。

今日はJavaSE 7/8 のファイルコピーについて書いていきます。

今までのファイルのコピーは、コピー元のファイルを読み込んで、コピー先のファイルに書き込む

という入出力の処理を記述する必要がありました。

Java6までのファイルコピー例

     //Fileオブジェクトを生成する
            FileInputStream fis = new FileInputStream("c:\\image001.jpg");
            FileOutputStream fos = new FileOutputStream("c:\\image002.jpg");

            //入力ファイルをそのまま出力ファイルに書き出す
            byte buf[] = new byte[256];
            int len;
            while ((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }

JavaSE7/8のファイルコピー例

     // 先ずはPathオブジェクトの生成
     Path from = Paths.get("C:/Users/hoge.txt");
     Path to = Paths.get("C:/Users/fuga.txt");

     // Filesクラスのコピーメソッドでhoge.txtをfuga.txtにコピー
     Files.copy(from, to);


移動先のファイルやディレクトリが既に存在する場合、FileAlreadyExistsExceptionが

スローされます。

その場合、coypメソッドの第3引数にCopyOption.REPLACE_EXISTING オプションを
指定することでファイルを上書きコピーすることができます。

     // 移動先のファイルを上書きする
     Files.copy(from, to, CopyOption.REPLACE_EXISTING);

他に第3引数に指定可能なオプションは以下のものがあります。

COPY_ATTRIBUTES : ファイル、ディレクトリの属性をコピー先に引き継ぐ
NOFOLLOW_LINK : シンボリックリンクをたどらずに、シンボリックリンクそのものをコピーする

感想としてファイルのコピー記述が簡単になったのと、Linuxなどのシンボリックリンクのコピーに

対応していたり、機能が強化された印象です。


人気ブログランキングへ

0 件のコメント:

コメントを投稿