Java:文件在应用程序中被锁定

时间:2015-10-29 15:14:17

标签: java

在我们的程序中,我们可以导入jar或fxml文件以使用自定义JavaFX组件。因此,文件将复制到单独的目录中,应用程序仅使用复制的文件来处理扫描等。

在少数情况下可能会发生这种情况,例如原始罐子被更改并且使用命令“clean”用maven重建。因此,这将删除所有必需的文件,包括导入的jar文件。但是如果我们的应用程序仍在运行,则maven会因为无法删除jar而崩溃。似乎有一个锁定文件,防止jar被删除。只有先关闭应用程序,才能最终删除jar。

有没有办法释放文件,这样即使应用程序正在运行,它也不会中断对文件的任何操作?

在复制文件之前,删除文件已经失败。

修改

好的,我认为扫描过程的提示是正确的。在复制jar之前,程序会扫描原始jar以查找应包含的组件。在创建JarFile对象后立即锁定该文件。

DEtoBinary

因此在第4行中,创建了JarFile对象,这意味着文件已解压缩。在这一行之后,我不能再删除jar了。那么在删除之前我必须关闭解压缩的文件吗?

2 个答案:

答案 0 :(得分:0)

如果你想要的是停止删除文件then read the documentation here,如果你想要的是确保文件被删除,那么确保没有对文件的引用,也没有使用任何文件相关的操作给定的文件......

如果您使用的是Windows,那么如果某个应用程序可以控制某个文件(例如C程序,而Filefopen( x ),则无法从其他应用程序访问X ,也不写(并通过写作开始删除)。

在linux中,即使应用程序当前拥有文件资源,也会有rm命令删除文件

答案 1 :(得分:0)

On Windows, SysInternals Handle can close handles (-c) of files that are in use. It's a command line tool that can run without user interaction.

-c Closes the specified handle (interpreted as a hexadecimal number). You must specify the process by its PID. WARNING: Closing handles can cause application or system instability.

It may be necessary to write a small batch script that first searches the handle by file name and then closes it.