无法删除原始文件

时间:2013-04-19 12:11:51

标签: java apache-commons-io

我们使用批处理文件作为窗口服务运行jar并将xml文件放在c:/processed中 目录;

如果xml格式错误,则将其移至错误文件夹;我们使用下面的方法将文件移动到错误文件夹,但得到以下异常。

我认为当进程运行时无法将文件移动到错误文件夹。

FileUtils.moveToDirectory("a.xml", "c:/processed/error", false);
  moveErrorFolder中的

异常:复制到'c:/processed/error/a.xml'后无法删除原始文件'c:/processed/a.xml'

7 个答案:

答案 0 :(得分:5)

  1. java进程无权删除该文件,但如果您可以在其上书写,则可以将其删除。
  2. 该文件被另一个进程锁定。当您使用Excel编写csv时,通常会发生这种情况。
  3. 文件被java进程自己锁定,在移动文件之前关闭()文件。

答案 1 :(得分:2)

在reader.close()之后放入Thread.sleep() - 它就像魅力一样

reader.close();
// Thread is Explicitly made to Sleep as Threads were shared and files were not getting Moved.

Thread.sleep(10000);

答案 2 :(得分:0)

提供更多细节的另一个例外可能嵌套在由cause属性

持有的Exception中

答案 3 :(得分:0)

1)确保您没有在编辑器/查看器中打开xml或由其他进程使用xml。
2)在移动文件之前确保你.close()。

答案 4 :(得分:0)

检查您是否在目录中打开了一个文件进行读取或写入,并且在尝试删除父目录之前没有调用.close();

答案 5 :(得分:0)

你可以从apache尝试这个方法:

void org.apache.commons.io.FileUtils.moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)

e.g。

使用此导入

     import org.apache.commons.io.FileUtils;

你的代码就像这样:

  FileUtils.moveFileToDirectory(new File("c:/processed/a.xml"), new File("c:/processed/error"), false);

答案 6 :(得分:0)

自从过去24小时以来,我一直在努力解决这个错误。以上答案都不适合我。我的操作系统是Windows 7 64位,我使用的是JDK 6.我尝试了FileUtils.moveToDirectory方法以及file.delete。

我怀疑它与Java有关。我卸载并重新安装了JDK 6(我以管理员的身份运行安装程序以确定)并重新启动我的机器和Eureka,错误消失了,事情开始起作用了。

现在不要问我为什么我还在2017年使用JDK 6(一些企业软件****)