首先,我已经阅读了许多关于这个主题的 SO 问题,并尝试了其中建议的内容。
这是我的情况。我正在使用 Processing 框架编写一个 Java 应用程序,我正处于需要开始考虑打包应用程序的最后阶段。可以从命令行执行的 jar 文件是我尝试使用 Eclipse 中的导出功能构建的。
我的项目结构如下所示:
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
当我导出 jar 文件并解压缩 jar 以检查其内容时,我发现这些目录的内容已转储到 .jar 的顶层。
看起来像这样:
.jar
packages
jar files
fonts
json files
因此,当我尝试使用以下内容加载配置文件时:
BufferedReader reader = new BufferedReader( new FileReader( path ) );
当我在 Eclipse 中运行应用程序时,一切正常。但是 jar 文件会抛出一个FileNotFoundException
.
我在 SO 上看到的许多关于此类问题的问题都建议使用 usingclass.getClass().getResource()
或class.getResourceAsStream()
. 我已经使用相对路径和文件名尝试了这两种方法,如下所示:
class.getResource( 'config.json' );
class.getResources( 'cfg/config.json' );
class.getResourceAsStream( '../../config.json' );
当从 Eclipse 或 jar 使用以下命令运行时,所有这些方法都返回 null:
java -jar myjarfile.jar
我也愿意使用 Ant 文件。事实上,我现在正在使用导出功能生成的 Ant 文件来构建 jar。如果我可以添加一些东西来将目录添加到 jar 中,那也很棒。