当前位置: 首页 > 面试题库 >

Java毫无理由地锁定文件

查学文
2023-03-14
问题内容

尽管在finally子句中关闭了流,但是使用Java时,我似乎经常遇到清理问题的情况。File.delete()无法删除文件,Windows
Explorer也失败。运行System.gc()有时会有所帮助,但是始终终止VM总是无济于事,这不是一个选择。

有人有其他可以尝试的想法吗?我在Windows XP上使用Java 1.6。

更新:删除了FLAC代码示例,如果我将其隔离的话,该代码将起作用。

更新:更多信息,这发生在Apache Tomcat中,Commons
FileUpload用于上传文件,并且可能是罪魁祸首,我也使用Runtime.exec()在单独的过程中执行LAME来对文件进行编码,但这似乎不太可能造成这种情况的原因是ProcessExplorer清楚地表明java.exe在文件上具有RW锁定,并且LAME可以正常终止。

更新:我正在假设存在丢失的close()或未在我的代码或外部库中的某处调用的close()。我就是找不到!


问题答案:

您发布的代码看起来不错-它不会引起您所描述的问题。我了解您仅发布了一部分代码-
您可以尝试将这部分内容提取到一个单独的程序中,运行它,看看问题是否仍然存在吗?我的猜测是代码中有其他地方可以new FileInputStream(path);正确关闭流,也不能正确关闭流。尝试删除文件时,您可能只在这里看到结果。



 类似资料:
  • 问题内容: 我有几个线程(其中一些由进程X产生,其他由进程Y 等产生 ),并且每个线程都需要写入文件。但是,如果开始写第一,那么,当开始写作,它需要等待到 释放文件 ,以便它可以读取写在该内容。换句话说,每个线程都会有一个方法,如下所示: 我的问题是:如何完成以上代码?我正在研究该类,但是它在Javadoc中说: “文件锁代表整个Java虚拟机持有。它们不适合控制同一虚拟机中多个线程对文件的访问。

  • 问题内容: 有没有一种方法可以检测MySQL中的锁定表?我的意思是表被命令锁定。 (请注意,有兴趣检测使用来获取的 命名 锁的读者应改为从get_lock显示显示所有当前锁。) 问题答案: 显示每个表的状态及其锁定。 对于命名锁,请查看显示来自get_lock的所有当前锁

  • 问题内容: 尝试使用MVN测试命令行运行selenium测试时,出现此错误。奇怪的是,我三天前尝试了一下,并成功运行了: 这是我的测试: 问题答案: 我只是使用chromeDriver,它工作正常。

  • 问题内容: 我们的一位客户正在使用某些Novell安全软件,有时会锁定我们的软件创建的某些.class文件。发生这种情况时,这会给他们带来一些麻烦的问题,我正在尝试研究一种变通办法,我们可以将其添加到错误处理中以解决此问题。我想知道java api中是否有任何调用可用于检测文件是否已锁定,如果已锁定,则将其解锁。 问题答案: 在尝试写入文件之前,您可以使用File.canWrite()检查Java

  • 我正在尝试使用Firefox运行Selenium测试。我正在使用C#。 我还尝试了配置文件集: 我收到的错误: 无法在45000毫秒内绑定到锁定端口7054 我甚至尝试卸载Firefox,包括配置文件,然后重新安装。没有帮助。 仅供参考:我有一个关于3个selenium webdrivers的问题。我试图把这个问题分成多个部分,这样讨论就更容易了。原文:Selenium WebDriver-没有适

  • 问题内容: 这可能与以前的帖子类似,但是我想具体说明在网络上而不是本地使用锁定。我想将文件写入共享位置,因此它很可能会在网络上运行(一定是Windows网络,也许是Mac)。我想防止其他人在写入文件时读取文件的任何部分。这不是一个高度并发的过程,文件通常小于10MB。 我已经阅读了文档和文档,对什么是安全的和什么不是安全的感到有些困惑。我想锁定整个文件,而不是部分文件。 我可以使用,并且它在网络上