2013-04-10 59 views
0

我正在使用以下方法将文件从一个文件夹(源)移动到另一个(目标)。我添加了一个检查来查看文件是否存在,该文件返回true,但文件仍然没有移动到目的地。文件移动不起作用

在这里,源路径是:

C:\ App_v10.4 \ RAP009.jrxml和C:\ App_v10.4 \ RAP009.jasper

目的地:

C:\用户\ Avijit \桌面\ RAP009.jrxml和C:\用户\ Avijit \桌面\ RAP009.jasper

private void moveFile(List<String> source, String destination) 
     throws IOException { 

    if (null != source && !source.isEmpty()) { 
     for (String path : source) { 
      try { 
       File file = new File(path); 
       System.out.println(path); 
       System.out.println("File :" + file.exists()); 
       System.out.println(new File(destination + file.getName())); 
       System.out.println(file.getCanonicalPath()); 
       System.out.println(file.getAbsolutePath()); 
       System.out.println(file.getPath()); 
       if (file.renameTo(new File(destination + file.getName()))) { 
        System.out.println("File is moved successful!"); 
       } else { 
        System.out.println("File has failed to move!"); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

控制台O/P:

C:\App_v10.4\RAP009.jrxml 

File :true 
C:\Users\Avijit\Desktop\RAP009.jrxml 

C:\App_v10.4\RAP009.jrxml 

C:\App_v10.4\RAP009.jrxml 

C:\App_v10.4\RAP009.jrxml 

File has failed to move! 

C:\App_v10.4\RAP009.jasper 

File :true 

C:\Users\Avijit\Desktop\RAP009.jasper 

C:\App_v10.4\RAP009.jasper 

C:\App_v10.4\RAP009.jasper 

C:\App_v10.4\RAP009.jasper 

File has failed to move! 
+0

你对目标目录有写访问权限? – EJP 2013-04-12 23:07:16

+0

感谢您看一看, 是的,我对目标目录有写访问权限ectory ... – Avijit 2013-04-13 15:29:21

回答

0

根据API为File

“这种方法的行为的许多方面是天生的平台依赖性:重命名操作可能无法从一个文件系统的文件移动到另一个,它可能没有是原子的,如果具有目标抽象路径名的文件已经存在,它可能不会成功。返回值应该经常进行检查,以确保重命名操作成功。”

所以有使用renameTo警告。

不过你的情况很可能会从另一个问题的困扰。如果目录结构不存在,它会失败在Java 7中,这是固定的Files.move。这种方法会给予稍微更可靠的性能,即使子目录不存在问题原来不是罪魁祸首