移动目录时出错(如果已存在于java中)

时间:2015-03-04 09:13:51

标签: java java.nio.file

我试图强行移动目录,这意味着如果已经存在则覆盖而不会询问。

代码:

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);

在我使用的此调用选项中,不适用于文件夹。此代码已针对文件进行了测试,并且它也适用于已存在的文件。

但我想移动/覆盖文件夹。

3 个答案:

答案 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的最佳解释。