Javaでファイル操作をするときの一番基本的なクラスであるFileクラスには、File操作のためのメソッドが数多く用意されています。
https://docs.oracle.com/javase/jp/8/docs/api/java/io/File.html
その中に、renameToというファイル移動(パスの変更)を行うためのメソッドがあります。
しかし、このrenameToというメソッドを使うには注意が必要です。APIリファレンスはこのように書かれています。
「ファイルシステム間で移動できないことがある」とさらっと書いてありますが、私はこれを見落としており、renameToの戻り値がfalseになってしまいました。Linuxでいうところのパーティションをまたがっていたり、AIXのファイルシステムをまたぐ場合のファイル移動はこのメソッドを使うことはできません。
同じく、APIリファレンスに書いてありますが、Filesクラスにはプラットフォームに依存しないmoveメソッドがあります。が、これはJava 7以降のことなので、Java 6はこんな感じでファイルをコピーして、削除する処理を自作しないといけないです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<code>// ファイル移動のために、ファイルコピー > 削除を行う public class Sample { public static void main(String args[]) { try { //Fileオブジェクトを生成する FileInputStream fis = new FileInputStream("c:\\test001.jpg"); FileOutputStream fos = new FileOutputStream("c:\\test002.jpg"); //入力ファイルをそのまま出力ファイルに書き出す(ファイルコピー) byte buf[] = new byte[512]; int len; while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len); } //終了処理 fos.flush(); fos.close(); fis.close(); } catch (IOException ex) { ex.printStackTrace(); } // コピーしたら削除する File file = new File("c:\\test001.jpg"); if (file.exists()){ System.out.println("ファイルは存在します"); }else{ System.out.println("ファイルは存在しません"); } } }</code> |
今の現場が未だにJava 6を使っており、こんなものまで自分で実装しなくてはならないとは、、、早くバージョンアップしないだろうか。。。