使用 Launch4j 从 .jar 编译为 .exe 时无法访问资源文件夹
Unable to reach resources folder when compiling from .jar to .exe using Launch4j
我出于学术目的制作了一个小程序 Java,它的主要目的是读取一些 .txt 文件并将信息呈现给用户。这些文件存在于 src 文件夹下的 resources 文件夹中。
从 Eclipse 启动时,程序 运行s 是预期的。
使用 Launch4j 应用程序,我能够成功地创建一个 运行 很好的 exe 并执行预期的操作,直到我尝试读取资源文件夹中的 .txt 文件,该文件似乎无法访问.
我猜测当我启动 exe 时 运行 时间路径会更改为创建 exe 的位置,所以我在桌面文件夹中创建了程序并在程序中指定了这个路径,但是这似乎并不能解决问题。
作为替代方案,我将 .txt 文件从程序中移出,并再次在桌面文件夹中使用所述 .txt 文件创建 exe,将程序链接到此路径,但再次无法正常工作。
用于获取 .txt 文件的命令是:
Files.readAllLines(Paths.get(doc)).get(line)
而 doc 只是预期的 .txt 文件的路径。
值得注意的是,我以前没有 Java 方面的经验,在整个程序开发过程中,我尽最大努力使用我完全理解的命令并使其尽可能简单。我希望解决方案可以按照这些思路进行!我非常有信心这一定是一个菜鸟错误,但我似乎无法在任何地方找到解决这个特定问题的方法。
Eclipse 中的文件路径与 .exe 或 JAR 文件中的文件路径不同。
我懒得让这位网友解释了:p
Rather than trying to address the resource as a File just ask the
ClassLoader to return an InputStream for the resource instead via
getResourceAsStream:
InputStream in = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
As long as the file.txt resource is available on the classpath then
this approach will work the same way regardless of whether the
file.txt resource is in a classes/ directory or inside a jar.
The URI is not hierarchical occurs because the URI for a resource
within a jar file is going to look something like this:
file:/example.jar!/file.txt. You cannot read the entries within a jar
(a zip file) like it was a plain old File.
This is explained well by the answers to:
How do I read a resource file from a Java jar file?
Java Jar file: use resource errors: URI is not hierarchical
原来的 post 是 here,感谢其作者。
修复 URL 应该可以让您在使用 .exe 时读取该文件。
编辑更正。感谢@VGR(见评论)纠正我的错误。
我出于学术目的制作了一个小程序 Java,它的主要目的是读取一些 .txt 文件并将信息呈现给用户。这些文件存在于 src 文件夹下的 resources 文件夹中。 从 Eclipse 启动时,程序 运行s 是预期的。 使用 Launch4j 应用程序,我能够成功地创建一个 运行 很好的 exe 并执行预期的操作,直到我尝试读取资源文件夹中的 .txt 文件,该文件似乎无法访问.
我猜测当我启动 exe 时 运行 时间路径会更改为创建 exe 的位置,所以我在桌面文件夹中创建了程序并在程序中指定了这个路径,但是这似乎并不能解决问题。
作为替代方案,我将 .txt 文件从程序中移出,并再次在桌面文件夹中使用所述 .txt 文件创建 exe,将程序链接到此路径,但再次无法正常工作。
用于获取 .txt 文件的命令是:
Files.readAllLines(Paths.get(doc)).get(line)
而 doc 只是预期的 .txt 文件的路径。
值得注意的是,我以前没有 Java 方面的经验,在整个程序开发过程中,我尽最大努力使用我完全理解的命令并使其尽可能简单。我希望解决方案可以按照这些思路进行!我非常有信心这一定是一个菜鸟错误,但我似乎无法在任何地方找到解决这个特定问题的方法。
Eclipse 中的文件路径与 .exe 或 JAR 文件中的文件路径不同。
我懒得让这位网友解释了:p
Rather than trying to address the resource as a File just ask the ClassLoader to return an InputStream for the resource instead via getResourceAsStream:
InputStream in = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); As long as the file.txt resource is available on the classpath then this approach will work the same way regardless of whether the file.txt resource is in a classes/ directory or inside a jar.
The URI is not hierarchical occurs because the URI for a resource within a jar file is going to look something like this: file:/example.jar!/file.txt. You cannot read the entries within a jar (a zip file) like it was a plain old File.
This is explained well by the answers to:
How do I read a resource file from a Java jar file?
Java Jar file: use resource errors: URI is not hierarchical
原来的 post 是 here,感谢其作者。
修复 URL 应该可以让您在使用 .exe 时读取该文件。
编辑更正。感谢@VGR(见评论)纠正我的错误。