今日は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 件のコメント:
コメントを投稿