猿问

使用 Launch4j 从 .jar 编译为 .exe 时无法访问资源文件夹

我制作了一个用于学术目的的小型 Java 程序,它的主要重点是读取一些 .txt 文件并将信息呈现给用户。这些文件位于 src 文件夹下的资源文件夹中。该程序在从 Eclipse 启动时按预期运行。使用 Launch4j 应用程序,我能够成功创建一个运行良好且符合预期的 exe,直到我尝试读取资源文件夹中的 .txt 文件,该文件似乎无法访问。

我猜当我启动 exe 时,运行时路径会更改为创建 exe 的位置,因此我在桌面文件夹中创建了程序并在程序中指定了此路径,但这似乎并没有解决问题.

作为替代方案,我将 .txt 文件移出程序,并再次在桌面文件夹中使用上述 .txt 文件创建了 exe,将程序链接到此路径,但它再次不起作用。

用于获取 .txt 文件的命令是:

Files.readAllLines(Paths.get(doc)).get(line)

并且 doc 只是预期的 .txt 文件的路径。

值得注意的是,我之前没有 Java 方面的经验,在整个程序开发过程中,我尽力使用我完全理解的命令并使其尽可能简单。我希望解决方案可以沿着这些路线!我非常有信心这一定是一个菜鸟错误,但我似乎无法在任何地方找到解决这个特定问题的方法。


萧十郎
浏览 348回答 1
1回答

潇湘沐

Eclipse 中文件的路径与 .exe 或 JAR 文件中的文件路径不同。我会让其他用户解释它,因为我很懒:p与其尝试将资源作为文件寻址,不如让 ClassLoader 通过 getResourceAsStream 返回资源的 InputStream:InputStream in = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 只要 file.txt 资源在类路径上可用,那么无论 file.txt 资源是在 classes/ 目录中还是在 jar 中,这种方法都会以相同的方式工作。URI 不是分层的,因为 jar 文件中资源的 URI 看起来像这样:file:/example.jar!/file.txt。您无法像读取普通的旧文件一样读取 jar(zip 文件)中的条目。原帖在这里,所有功劳归功于其作者。修复您的 URL 应该可以让您在使用 .exe 时读取该文件。为更正而编辑。感谢@VGR(见评论)纠正我的错误。
随时随地看视频慕课网APP

相关分类

Java
我要回答