我试图强行移动目录,这意味着如果已经存在则覆盖而不会询问。
代码:
import java.io.IOException;
import java.lang.System;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class MoveDirectory {
private static void movefilesandfolder(String sourceFilevar,String destinationFilevar)
{
System.out.println("source="+sourceFilevar);
System.out.println("destination="+destinationFilevar);
Path sourceFile=Paths.get(sourceFilevar);
Path destinationFile=Paths.get(destinationFilevar);
try {
Files.move(sourceFile, destinationFile,StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Sole entry point to the class and application.
* @param args Array of String arguments.
*/
public static void main(String[] args) {
movefilesandfolder("C:\\FTPDownload\\Downloaded\\epi141225_0001","C:\\FTPDownload\\In_Progress\\epi141225_0001");
}
}
错误输出:
source=C:\FTPDownload\Downloaded\epi141225_0001
destination=C:\FTPDownload\In_Progress\epi141225_0001
java.nio.file.DirectoryNotEmptyException: C:\FTPDownload\In_Progress\epi141225_0001
at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:372)
at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:286)
at java.nio.file.Files.move(Files.java:1345)
at MoveDirectory.movefilesandfolder(MoveDirectory.java:22)
at MoveDirectory.main(MoveDirectory.java:36)
如果文件夹不在目标路径上,但如果已存在则失败,则此代码有效。即使目标路径上存在空文件夹,此代码也不起作用。
Files.move(sourceFile, destinationFile,StandardCopyOption.REPLACE_EXISTING);
在我使用的此调用选项中,不适用于文件夹。此代码已针对文件进行了测试,并且它也适用于已存在的文件。
但我想移动/覆盖文件夹。
答案 0 :(得分:0)
的Javadoc:
public static Path move(Path source,
Path target,
CopyOption... options)
throws IOException
将文件移动或重命名为目标文件。
默认情况下,此方法尝试将文件移动到目标文件,如果目标文件存在则失败,除非源和目标是同一文件,在这种情况下此方法无效。如果文件是符号链接,则移动符号链接本身,而不是链接的目标。 可以调用此方法来移动空目录。
答案 1 :(得分:0)
您可以在移动之前删除目标目录,或者,如果要将目录合并在一起,请循环目录文件并移动新文件夹中的任何人
System.out.println("source="+sourceFilevar);
System.out.println("destination="+destinationFilevar);
Path sourceFile=Paths.get(sourceFilevar);
Path destinationFile=Paths.get(destinationFilevar);
try {
if(new File(destinationFile).exists()){
// DELETE DIRECTORY
}
Files.move(sourceFile, destinationFile,StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
或
System.out.println("source="+sourceFilevar);
System.out.println("destination="+destinationFilevar);
Path sourceFile=Paths.get(sourceFilevar);
Path destinationFile=Paths.get(destinationFilevar);
try {
if(new File(destinationFile).exists()){
// for each file in sourceFile
// Files.move file ...
}else{
Files.move(sourceFile, destinationFile,StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 2 :(得分:0)
您可以尝试使用Path.resolve(other Path)
这样的方法
Files.move(sourceFile, destinationFile.resolve(Paths.get(sourceFile).getFileName()), StandardCopyOption.REPLACE_EXISTING)
Java文档,提供有关this的最佳解释。