- - PR -
ファイルのコピーと移動処理
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-13 12:05
ファイルのコピーと移動処理をjava.io.Fileクラス等を使用して、
読む→別ファイルに書くでコピー、書いた後に読み込みファイルを削除することによって 移動処理としていましたが、移動処理は、FileクラスのrenameToメソッドを使用しても できるので、読み込み書き込みのコードを記述しなくて済むので、以下のようなコードで 実装するようになりました。 java.io.File file = new java.io.File( "c:\\abc.txt" ); // 移動元 java.io.File file2 = new java.io.File( "c:\\tmp\\abc.txt" ); // 移動先 boolean ret = file.renameTo( file2 ); そこで、コピー処理も同様にできないものかと相当の動作をするメソッドを探しましたが 見当たりませんでした。コピー処理に相当するメソッドは無いから、コピーする場合は 読む→別ファイルに書くという方法しかないのでしょうか? また、皆さんがコピーと移動処理を実装する際は、どのように行われていますでしょうか? | ||||||||
|
投稿日時: 2004-09-13 12:16
unibon です。こんにちわ。
renameTo はファイルシステムの機能を使って、文字通り「リネーム」しているため、ファイルシステム上でリネームに該当しない操作になる場合は失敗します。 たとえば、C: にあるファイルを A: に「リネーム」しようとしてもできません。 また、コピーに特化した API はなかったはずです。地道にファイルを読んでそれを別のファイルに書くコードを10〜20行ほどで書くしかないでしょう(なんらかのフレームワークにはこのようなメソッドが備わっているかもしれませんが)。 したがって、どんな環境でも動くようにするためには、renameTo は使えないでしょう。ただ、「リネーム」はコピーを伴わないため、速いですから、とりあえず renameTo を試みて、エラーだったらコピーするコードを実行する、という2段構えは良いかもしれません。 | ||||||||
|
投稿日時: 2004-09-13 13:00
できます。 少なくとも、Win2000 + JDK1.4.2では、D: から C: に「renameTo」できました。 内部的には、unibonさんのいうような手順が実装されているのだろうと思いますが。 | ||||||||
|
投稿日時: 2004-09-13 13:15
Fileクラスにコピーメソッドあっても良い気が
しますけどないですねぇ。 私は仕方ないんで、自作のUtilityクラスに コピーメソッド実装して使ってます。 標準でコピーメソッド実装してほしいかも。 | ||||||||
|
投稿日時: 2004-09-13 13:50
Jakarta Commons IOにそういうユーティリティクラスがあります。
http://jakarta.apache.org/commons/io/apidocs/org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.File) http://jakarta.apache.org/commons/io/ | ||||||||
|
投稿日時: 2004-09-13 13:55
unibon です。こんにちわ。
すみません。昔調べたのですが、忘れてしまいました。 Windows ではできるけど、Linux だとだめだったかも(これもあいまい | ||||||||
|
投稿日時: 2004-09-13 14:53
あいつーです。
unibonさん援護(笑
Solarisだと別スライス上へのrenameは失敗します。 | ||||||||
|
投稿日時: 2004-09-13 15:51
皆さん、回答ありがとうございます。
java.io.File 等の標準APIには、やはり、コピー処理を行うようなメソッドは 無いんですねー。また、renameTo も使用するならば、OSによることを前提で 使用しなければならないと...。 読み書きを自前のコードで作っていましたが、読み書きしなければならないならば、 koeさんが言われたような、Jakarta Commons IO 等のAPIを使用した方が 安全なのかもしれないですね。 皆さんのおかげでいろいろよくわかりました。ありがとうございます。 | ||||||||
