在我们的程序中,我们可以导入jar或fxml文件以使用自定义JavaFX组件。因此,文件将复制到单独的目录中,应用程序仅使用复制的文件来处理扫描等。
在少数情况下可能会发生这种情况,例如原始罐子被更改并且使用命令“clean”用maven重建。因此,这将删除所有必需的文件,包括导入的jar文件。但是如果我们的应用程序仍在运行,则maven会因为无法删除jar而崩溃。似乎有一个锁定文件,防止jar被删除。只有先关闭应用程序,才能最终删除jar。
有没有办法释放文件,这样即使应用程序正在运行,它也不会中断对文件的任何操作?
在复制文件之前,删除文件已经失败。
修改
好的,我认为扫描过程的提示是正确的。在复制jar之前,程序会扫描原始jar以查找应包含的组件。在创建JarFile对象后立即锁定该文件。
DEtoBinary
因此在第4行中,创建了JarFile对象,这意味着文件已解压缩。在这一行之后,我不能再删除jar了。那么在删除之前我必须关闭解压缩的文件吗?
答案 0 :(得分:0)
如果你想要的是停止删除文件then read the documentation here,如果你想要的是确保文件被删除,那么确保没有对文件的引用,也没有使用任何文件相关的操作给定的文件......
如果您使用的是Windows,那么如果某个应用程序可以控制某个文件(例如C
程序,而File
。fopen( 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.