【问题标题】:Unable to reach resources folder when compiling from .jar to .exe using Launch4j使用 Launch4j 从 .jar 编译为 .exe 时无法访问资源文件夹
【发布时间】:2019-03-15 22:24:39
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。
  • 非常感谢!!它正在正常工作!如果我可以投票给你,我会的,但因为我是新手,我似乎做不到:(
  • a) 很高兴你把它整理好了。 b) 支持 cmets(很大程度上)是无关紧要的。赞成答案有助于将它们排在首位,但您可以做的最好的事情就是接受答案,我注意到您已经这样做了,所以一切都很好。 :)

标签: java path directory embedded-resource launch4j


【解决方案1】:

Eclipse 中的文件路径与 .exe 或 JAR 文件中的文件路径不同。

我会让其他用户解释它,因为我很懒 :p

与其尝试将资源作为文件来处理,不如询问 ClassLoader 为资源返回一个 InputStream,而不是通过 getResourceAsStream:

InputStream in = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 只要 file.txt 资源在类路径上可用,那么 无论是否 file.txt 资源位于 classes/ 目录或 jar 中。

URI 不是分层的,因为资源的 URI 在 jar 文件中看起来像这样: 文件:/example.jar!/file.txt。您无法读取 jar 中的条目 (一个 zip 文件)就像是一个普通的旧文件。

以下问题的答案很好地解释了这一点:

How do I read a resource file from a Java jar file?

Java Jar file: use resource errors: URI is not hierarchical

原帖是here,全部归功于其作者。

修复您的 URL 应该可以让您在使用 .exe 时读取该文件。

为更正而编辑。感谢@VGR(见 cmets)纠正我的错误。

【讨论】:

  • 第二部分意义不大。如果需要在运行时修改,只需将资源复制到单独的文件中。在编译时,只需使用 IDE 或任何工具修改文件,然后重新构建。如果只是读取文件(正如问题所暗示的那样),则根本没有理由复制它。
  • 感谢大家为我节省了$$!!!该程序已启动并运行,因为它应该! [给大家一轮啤酒!!!]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
相关资源
最近更新 更多