我们正在运行jar,使用批处理文件作为窗口服务,并将xml文件放在c:/processed
中
如果XML有错误的格式,把它移到错误文件夹;我们正在使用下面的方法将文件移动到错误文件夹,但得到下面的异常。
我认为当进程运行时,它无法将文件移动到错误文件夹。
FileUtils.moveToDirectory("a.xml", "c:/processed/error", false);
movedErrorFolder异常:复制到'c:/processed/error/a.xml'后,删除原始文件'c:/processed/a.xml'失败
- java进程没有删除文件的权利,但是如果你可以在上面写,那么你可以删除它。
- 文件被其他进程锁定。当你用Excel打开csv文件时,通常会出现这种情况。
- 该文件被java进程self锁定,在移动该文件之前关闭该文件。
在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);
另一个给出更多细节的异常可能嵌套在exception中,由cause属性
1)确保xml没有在编辑器/查看器中打开或被其他进程使用。
2)确保在移动文件之前使用。close()
检查您是否在目录中打开文件进行读写,并且在尝试删除父目录之前没有调用.close();
你能从apache试试这个方法吗:
void org.apache.commons.io.FileUtils.moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)
。
使用此导入
import org.apache.commons.io.FileUtils;
,你的代码应该是这样的:
FileUtils.moveFileToDirectory(new File("c:/processed/a.xml"), new File("c:/processed/error"), false);
自过去24小时以来,我一直在努力解决这个错误。以上的答案都不适合我。我的操作系统是Windows 7 64位,我使用JDK 6。我尝试了方法FileUtils。moveToDirectory和file.delete.
我怀疑它与Java有关。我卸载并重新安装了JDK 6(我以管理员身份运行安装程序只是为了确保),并重新启动了我的机器,然后发现,错误消失了,一切都开始工作了。
现在不要问我为什么在2017年还在用JDK 6(一些企业软件****)