文件路径在NetBeans中有效,但在构建的JAR文件中无效



我有一个包含默认信息的文件,用于加载应用程序的textFields。当我构建时,我查找了如何将其构建到我的jar文件中,并被告知将其放入源包中,然后它就会被带来,所以我已经做到了。

文件结构:

Project
   -Source Packages
       -src
           ~Java Classes
       -defaultFiles
           ~Defaults.txt

我尝试使用的代码是:

BufferedReader in;
try {
    URL resourceURL = FuelProperties.class.getResource("/defaultFiles/Defaults.txt");
    in = new BufferedReader(new FileReader(resourceURL.getPath()));
}

当我通过NetBeans运行它时,这非常有效,但当我构建项目并尝试从jar文件运行它时它并没有获取文件。

我已经验证了默认文件正在构建中,并且存在于上面显示的相同文件结构中。

如果你能帮我解决这个问题,我将不胜感激,因为我不知道是什么阻碍了这个工作。谢谢

您必须在类路径中查找,而不是在磁盘上查找。要使用的API是:

URL resourceURL : this.getClass().getResource("relative path in the classpath");

一旦你有了网址,你就可以打开一个流,等等

编辑:在主要方法中,您当然需要更换

this.getClass()

通过

ClassName.class

我在搜索了几十个问题后找到了答案。事实证明,您只能在JAR中的文件中获得数据的InputStream,而不能像我尝试的那样获得File对象。(如果你想要File对象,你只需要从程序中的JAR中提取文件,然后你就可以访问它。)

所以让我的问题得以解决的代码只是简单地替换了这个:

URL resourceURL = FuelProperties.class.getResource("/defaultFiles/Defaults.txt");
in = new BufferedReader(new FileReader(resourceURL.getPath()));

有了这个:

in = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/defaultFiles/Defaults.txt")));

现在它在NetBeans和BuiltJAR文件中都可以工作。

最新更新