gpt4 book ai didi

java - 在 Windows 上从 jar 中访问文件

转载 作者:行者123 更新时间:2023-12-01 23:36:39 26 4
gpt4 key购买 nike

我在 Windows 上访问 Jar 中的文件时遇到问题。我在 Unix 上运行时没有这个问题。我已经在 Windows 和 Unix 上创建了 jar,这没有什么区别。不管怎样,它都不能在 Windows 上运行。

我在我的 jar 上运行了 jar -tf 命令,我运行的类位于:a/b/c/d/ClassOne.class。我正在寻找的类位于 jar 的基本目录中:ClassTwo.class

我在这个 ClassOne 中的代码如下所示:

String path = File.separator + "myYAML.yml";
InputStream in = MetricCollector.class.getResourceAsStream(path);
InputStreamReader isr = new InputStreamReader(in);
BufferedReader input = new BufferedReader(isr);

我的代码在显示的最后一行中断,抛出 NullPointerException,我只能相信这意味着它找不到我给它的路径。然而,当我运行 jar 时,这个确切的代码在我的调试器和 Unix 上运行得很好。

我还测试了以下路径:

  1. “myYAML.yml”
  2. File.seperator + “..” + File.seperator + “..” + File.seperator + “..” + File.seperator + “..” + “myYAML.yml”
  3. “..”+ File.seperator +“..”+ File.seperator +“..”+ File.seperator +“..”+“myYAML.yml”

一切都无济于事。

我已经尽可能地使用了以下 Stack Overflow 帖子,但他们似乎没有给我答案:How to reference a resource file correctly for JAR and Debugging? , Accessing resources within a JAR fileReading file from within JAR not working on windows

如果有任何额外的帮助,我将非常感激。提前致谢。

最佳答案

File.separator 无法在 Windows 上工作,它返回 \。无论操作系统如何,您都需要使用 / 作为分隔符。

Class#getResource(String)

Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'. Otherwise, the absolute name is of the following form: modified_package_name/name

Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').

换句话说,您必须使用/ClassLoader.html#getResource(java.lang.String) 的 javadoc 对此进行了进一步解释。 Class#getResource 委托(delegate)给哪个。

The name of a resource is a /-separated path name that identifies the resource.

如果资源位于类路径的根目录,请使用

InputStream in = MetricCollector.class.getResourceAsStream("/myYAML.yml");

关于java - 在 Windows 上从 jar 中访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573463/

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