我有一个文件,其中包含我用来加载应用程序的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文件运行它时,它不会抓取文件。
我已验证正在构建默认文件,并且该文件存在于上面显示的相同文件结构中。
如果你可以帮我解决这个问题,我将非常感激,因为我不知道是什么阻止了这项工作。谢谢。
答案 0 :(得分:4)
您必须在类路径中查找,而不是在磁盘上查找。 要使用的API是:
URL resourceURL : this.getClass().getResource("relative path in the classpath");
获得网址后,您可以打开流等
编辑:在主要方法中,你当然需要替换
this.getClass()
通过
ClassName.class
答案 1 :(得分:1)
我在搜索了几十个问题后找到了答案。事实证明,您只能在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和Built JAR文件中都有效。