Intellij JavaFX-在jar中找不到资源目录

时间:2018-12-16 20:59:12

标签: java intellij-idea

我正在研究Java项目,但有一个小问题。

我的项目当前可运行,并且当我从IntelliJ启动他时可以正常运行。要工作,他需要一些资源,例如图像或.txt文件。

这是我当前的文件 configuration

我的问题是:

当我将项目导出到可执行jar文件中时,他不起作用。 原因是他找不到资源。

但是,我用过Class.class.getResourcesAsStream(String)

最奇怪的是,资源在罐子中,并且正确放置...

任何人都可以帮助我们吗?

感谢您的帮助。

我的代码

File f = new File(Loader.class.getResource("/xsbfiles").getFile());
System.out.println(f.getAbsolutePath() +": exists ? " + f.exists());
System.out.println(f.getAbsolutePath());

从Intellij启动应用程序

/Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles: exists ? true
/Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles
Opening /Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles/MicroCosmos.txt
Successful Opening

从终端启动jar文件

/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/file:/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/Sokoban.jar!/xsbfiles: exists ? false
/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/file:/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/Sokoban.jar!/xsbfiles
No xsbfile found

编辑:

最后,如示例所示,我已经使用BufferedReader解决了我的问题:

BufferedReader reader = new BufferedReader(
            new InputStreamReader(MyClass.class.getResourceAsStream("/xsbfiles/MicroCosmos.txt")));

这是加载一个文件的好方法。但是,我需要读取名为xsbfiles ...

的文件夹中的所有文件。

我搜索了不同的来源并发现了a similar question

一个答案建议使用“ hack”列出文件夹中包含的文件。 这是蜘蛛侠鲍里斯(Boris)的代码示例:

public static List<URL> getResources(final String path) throws IOException {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try (
        final InputStream is = loader.getResourceAsStream(path);
        final InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
        final BufferedReader br = new BufferedReader(isr)) {
    return br.lines()
            .map(l -> path + "/" + l)
            .map(r -> loader.getResource(r))
            .collect(toList());
    }
}

为了很好地理解代码,我已经在IDE和终端中运行了他。 似乎可以在我的IDE上正确运行,但不能与jar一起运行。

我怎么办那不起作用?

0 个答案:

没有答案