11

私は nio クラスに不慣れで、ファイルのディレクトリを新しく作成したディレクトリに移動するのに問題があります。

最初に次の 2 つのディレクトリを作成します。

File sourceDir = new File(sourceDirStr); //this directory already exists
File destDir = new File(destDirectoryStr); //this is a new directory

次に、次を使用して、既存のファイルを新しいディレクトリにコピーしようとします。

Path destPath = destDir.toPath();
for (int i = 0; i < sourceSize; i++) {
    Path sourcePath = sourceDir.listFiles()[i].toPath();
    Files.copy(sourcePath, destPath.resolve(sourcePath.getFileName()));
}

これにより、次のエラーがスローされます。

Exception in thread "main" java.nio.file.FileSystemException: destDir/Experiment.log: Not a directory

destDir/Experiment.logそれが既存のディレクトリではないことはわかっています。操作の結果、新しいファイルになるはずですFiles.copy。誰かが私の操作が間違っている場所を指摘できますか? ありがとう!

4

4 に答える 4

4

宛先ディレクトリが存在しない場合は、単純に作成します。

File sourceDir = new File(source); //this directory already exists
File destDir = new File(dest); //this is a new directory
destDir.mkdirs(); // make sure that the dest directory exists

Path destPath = destDir.toPath();
for (File sourceFile : sourceDir.listFiles()) {
    Path sourcePath = sourceFile.toPath();
    Files.copy(sourcePath, destPath.resolve(sourcePath.getFileName()));
}

また、ディレクトリを返すことに注意してくださいsourceDir.listFiles()。これは、再帰するか、無視する必要があります...

于 2013-02-28T14:49:05.757 に答える
0
for (int i = 0; i < sourceSize; i++) {
    Path sourcePath = sourceDir.listFiles()[i].toPath();
    Files.copy(sourcePath, destPath.resolve(sourcePath.getFileName()));
}

これは非常に奇妙なコードです。のどこかからすでにファイル数を取得していますが、繰り返しごとsourceSizeに呼び出しています。listFiles()私は次のようなものをもっと期待していたでしょう:

for (File file : sourceDir.listFiles()) {
    Path sourcePath = file.toPath();
    Files.copy(sourcePath, destPath.resolve(sourcePath.getFileName()));
}
于 2013-03-01T05:12:47.620 に答える