gpt4 book ai didi

java - 通过URL访问JAR内部文件后可以删除它吗?

转载 作者:行者123 更新时间:2023-12-02 07:19:30 24 4
gpt4 key购买 nike

在 Groovy 中,我正在从 JAR 内部读取一个文件,经过一些处理后,我希望删除这个 JAR,但是一旦通过 URL 访问,它似乎不允许我删除。

示例:

File jarFile = new File('jarFile.jar')
URL url = jarFile.toURI().toURL()

URL intUrl = new URL("jar:$url!/internalFile.json")
println intUrl.text // reads text correctly

jarFile.delete() // returns false, cannot delete

getText() 命令的 Javadoc 表示连接在调用结束时关闭,并且此 JAR 通常不在类路径中。有什么办法可以让这段代码工作吗?

最佳答案

尝试设置sun.zip.disableMemoryMapping系统属性:

java -Dsun.zip.disableMemoryMapping=true ....

(或者您在调用 Gradle 时设置系统属性)。 ZipFile(支持 jar: URL)默认使用内存映射,这可能导致 Windows 认为相关文件仍处于打开状态。如果这不是一个选项,那么您可以尝试使用 commons-compress ZipFile 实现而不是 java.util.zip 实现:

@Grab(group='org.apache.commons', module='commons-compress', version='1.4.1')
import org.apache.commons.compress.archivers.zip.*

File jarFile = new File('jarFile.jar')
ZipFile f = new ZipFile(jarFile)
ZipArchiveEntry json = f.getEntry('internalFile.json')
if(json) {
f.getInputStream(json)?.withStream {
println it.getText('UTF-8')
}
}
f.close()
jarFile.delete()

关于java - 通过URL访问JAR内部文件后可以删除它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14436904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com