1

私の Java 7 アプリケーションでは、すべてのファイルとディレクトリsourceFolderを別の に移動する必要がありますdestinationFolder。これら 2 つのフォルダーが同じファイル システムまたはパーティション上にあるかどうかはわかりません。実行時にユーザーが両方を指定できるからです。

移動するファイルとディレクトリは非常に大きくなる可能性があるため (数 GB)、それらを効率的に移動する方法を探していました。したがって、同じファイル システム上にない場合sourceFolderにのみコピーする必要があります。destinationFolderしたがって、理想的には、同じファイル システムでの移動操作は、可能であれば名前変更操作である必要があります。

このアプリケーションは、Windows システムと Linux システムの両方で使用されます。

関連するJava 7機能については知っていますが、フォルダーが空でない場合、フォルダーのすべてのコンテンツを別の場所に移動することはできません。これは私の場合の要件です。また、有望なApache Common の FileUtilsクラスも見つけました。ただし、そのドキュメントには、とが同じファイル システム上にない場合は、 「コピーして削除」操作を行う必要があると記載されています。sourceFolderdestinationFolder

私の質問は次のとおりです。そのクラスを使用する場合、クロスプラットフォームの方法でFileUtilsファイルシステムをチェックするにはどうすればよいsourceFolderですか?destinationFolder

4

1 に答える 1

1

を指していると思いますFileUtils.moveFile()

は、ソースと宛先が異なるディレクトリにある場合に対処しますmoveFile を使用しようとFile.renameToし、それが失敗した場合は、ファイルをコピーしようとします。(ソースコードを参照してください。)要するに、自分で確認する必要はありませ...

しかし、あなたの実際の質問への回答として、2 つのディレクトリが同じファイル システム上にあるかどうかをテストFileする方法は、どちらも ApacheもFileUtils 提供していません。しかし(私は思う)、次のような方法でJava 7機能を使用してそれを行うことができます:

Path path1 = new File(str1).toPath();
Path path2 = new File(str2).toPath();
if (path1.getFileSystem().equals(path2.getFileSystem()) {
    ...
于 2013-10-17T22:55:04.673 に答える