文件路径在NetBeans中有效,但在内置的JAR文件中无效

时间:2012-03-23 15:25:18

标签: java file netbeans

我有一个文件,其中包含我用来加载应用程序的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文件运行它时,它不会抓取文件。

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

如果你可以帮我解决这个问题,我将非常感激,因为我不知道是什么阻止了这项工作。谢谢。

2 个答案:

答案 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文件中都有效。