java - 加载jar中包含的资源

标签 java jar resources

在我的应用程序中,我以这种方式加载资源:

WinProcessor.class.getResource("repository").toString();

这给了我:
file:/root/app/repository   (and I replace "file:" with empty string)

当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作:
java -jar app.jar

路径变为:
jar:/root/app.jar!/repository

有什么办法解决这个问题?

我将使用“存储库”目录名称来创建此目录:
ConfigurationContext ctx = (ConfigurationContext) ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryString, null);

以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它:
System.setProperty("javax.net.ssl.trustStore", fileNameString)

最佳答案

听起来您正在尝试使用FileInputStream或类似的方式加载资源。不要这样做:不要调用getResource,而是调用 getResourceAsStream 并从中读取数据。

(您可以改为从URL加载资源,但是调用getResourceAsStream更加方便。)

编辑:看过您更新的答案后,似乎其他代码位依赖于文件系统中物理单个文件中的数据。因此,答案是首先不要将其 bundle 在jar文件中。您可以检查它是否在单独的文件中,如果不提取,则可以将其提取到临时文件中,但这确实是IMO。

关于java - 加载jar中包含的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034074/

相关文章:

java - 无法在某些设备上未调用 Looper.prepare() 的线程内创建处理程序

java - Gradle fatJar/uberJar 导致无法找到或加载主类

java - Struts 2.1 升级到 2.3.15.1 时出现的问题

iphone - 链接到 WebView 内的资源 - iPhone

resources - 对 Docker 上的 cpushare 设置感到困惑。

java - 非阻塞 while(true) 循环中的 wait(1) 是否比使用 wait() 和 notify() 更有效?

java - userobjs 无法解析为变量

java - 尝试使用 Android "Parsing XML Data"代码不起作用 : "Error parsing XML"

java - 如何从可运行的 jar 创建 txt 文件?

image - 使用本地资源的 SVG <image> 元素的语法