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

时间:2018-10-10 22:54:35

标签: java path directory embedded-resource launch4j

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

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

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

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

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

doc只是目标.txt文件的路径。

值得注意的是,我没有Java的经验,在程序的整个开发过程中,我都尽量使用我完全理解的命令并使它尽可能简单。我希望解决方案可以遵循这些原则!我非常相信这一定是菜鸟的错误,但是我似乎在任何地方都找不到解决此特定问题的方法。

1 个答案:

答案 0 :(得分: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。您无法阅读罐子中的条目   (一个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(请参阅评论)纠正我的错误。