【问题标题】:File renameTo & File.delete文件renameTo & File.delete
【发布时间】:2023-03-13 08:33:02
【问题描述】:

我一直在用石英写一个批处理系统的程序,但我发现了一个问题,

if(!file.renameTo(new File(PATH_FILE_PROCESSED+file.getName())))System.out.println("Cannot Move File :"+file.getAbsolutePath());
else{
    if(!file.delete())System.out.println("Cannot Delete File :"+file.getAbsolutePath());    
}

我想将文件从一个目录移动到另一个目录,但我无法在同一进程中删除该文件,根据我的分析,我认为该文件尚未完成复制然后运行 ​​file.delete(); 我的问题是,有没有办法等到文件完成复制然后运行file.delete? 谢谢

【问题讨论】:

  • 阅读您的代码,当renameTo 调用成功 时,您似乎进入了else 块。因此,该文件不再存在于其原始位置。所以,你不能从它原来的位置删除它,因为它已经不存在了。
  • no renameTo in java 实际上是复制文件而不是移动文件,这就是为什么我想在成功时删除
  • 如果File.renameTo 将文件复制到您的计算机上而不是重命名它,则说明您的平台存在问题 - 它不应该这样做。同样的问题也可能影响删除的操作。

标签: java file file-moving


【解决方案1】:

重命名几乎是即时的,因为它不会复制文件,它只是移动它出现的目录(除非你在文件系统之间移动)

在 Windows 上,如果文件在某处打开,则无法重命名或删除。确保您已正确地关闭()它。

【讨论】:

  • 感谢@Peter Lawrey 的回答,但我的 java.io.File 没有 close() 命令,您还有其他方法吗?
  • 如果关闭文件是这里的真正问题,请尝试寻找一些 InputStreams(或 OutputStream)、BufferedReader,您可以用来读取/写入文件的东西。
  • @NoobatPrograming 你在哪里处理文件?
  • @PeterLawrey 上面的代码过程是解压缩文件然后将所有文件插入数据库然后运行这些代码,
  • @PeterLawrey 我想我使用 zip4j 来提取我的文件,现在正在寻找一种方法,可能是因为在 zip4j 中文件仍然打开
【解决方案2】:

我想我已经发现了问题,问题是当我在 zip 中插入文件时,一些其他代码已经插入了数据,因此它在数据库中创建了重复项,并产生了这样的错误。所以谢谢你回答这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多