无法在可执行 jar 中找到 java 项目 运行 中的文件
Unable to locate a file in java project running in a executable jar
class.getResource(FILE_NAME)
和 class.getClass().getClassLoader().getResource(FILE_NAME)
运行 都完全在我的 eclipse 中,但是相同的代码无法找到 jar 文件中的文件,当 运行 为windows 机器中的可执行 jar。
我浏览了所有可用于此问题的相关链接(好吧,不是完全相同的问题,但 90% 是同步的),寻求解决方案,但没有任何回复来自这些帖子,所以我发布了我的问题作为一个单独的问题希望得到帮助。
我总共 运行 解决了 4 个案例,但 none 到目前为止有效,我现在没有想法了。
class.getClass().getClassLoader().getResource("/resources/readme.txt");
class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");
class.getResource("resources/readme.txt");
以上所有4个案例中,只有2个案例运行在eclipse中成功,如下所述。
class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");
其他 2 个案例只是在线程中抛出异常 "main" java.lang.NullPointerException
来到可执行 jar,所有 4 个案例都让我感到震惊 Exception in thread "main" java.lang.NullPointerException
。
所以我创建了一个名为 resources
的文件夹,我的 jar 位于其中,并将我的文件放在这个文件夹和 运行 jar 中。现在 jar 运行ning 没有任何问题引用我创建的 resources
文件夹中的文件。因此,无论我 运行 这个 jar(windows、linux 等),我都需要创建一个 resources
文件夹并将我的文件放在该文件夹下。现在的问题是,是否可以让我的 jar 引用 jar 本身内的 resources
文件夹?
非常感谢任何帮助!
如果您正在使用 Spring:
org.springframework.util.ResourceUtils.getFile("classpath:readme.txt")
否则:
import com.google.common.io.Resources
byte[] byteSource = Resources.asByteSource(Resources.getResource("readme.txt")).read()
要获取您的 txt 文件:
File yourFileIsHere = new File("resources/readme.txt");
你的文件放在哪里?
在你的 jar 的相同位置,例如:
myapp/yourjar.jar
myapp/resources/readme.txt
如果您想读取“src”文件夹中的文件:
InputStream yourInputStream = new YourClass().getClass().getClassLoader().getResourceAsStream("readme.txt");
方法 class.getClass().getClassLoader().getResource()
可能需要 3 个前缀:url:
、classpath:
和 file:
每个前缀都说明了您的搜索基础。如果您想在 jar 中搜索,请使用 classpath:
前缀。这会告诉您的 classloader 在您的 classpath 中到处搜索。这是 example how to deal with it with Spring tools. Look also at ResourceLoader class 在 Spring
class.getResource(FILE_NAME)
和 class.getClass().getClassLoader().getResource(FILE_NAME)
运行 都完全在我的 eclipse 中,但是相同的代码无法找到 jar 文件中的文件,当 运行 为windows 机器中的可执行 jar。
我浏览了所有可用于此问题的相关链接(好吧,不是完全相同的问题,但 90% 是同步的),寻求解决方案,但没有任何回复来自这些帖子,所以我发布了我的问题作为一个单独的问题希望得到帮助。
我总共 运行 解决了 4 个案例,但 none 到目前为止有效,我现在没有想法了。
class.getClass().getClassLoader().getResource("/resources/readme.txt");
class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");
class.getResource("resources/readme.txt");
以上所有4个案例中,只有2个案例运行在eclipse中成功,如下所述。
class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");
其他 2 个案例只是在线程中抛出异常 "main" java.lang.NullPointerException
来到可执行 jar,所有 4 个案例都让我感到震惊 Exception in thread "main" java.lang.NullPointerException
。
所以我创建了一个名为 resources
的文件夹,我的 jar 位于其中,并将我的文件放在这个文件夹和 运行 jar 中。现在 jar 运行ning 没有任何问题引用我创建的 resources
文件夹中的文件。因此,无论我 运行 这个 jar(windows、linux 等),我都需要创建一个 resources
文件夹并将我的文件放在该文件夹下。现在的问题是,是否可以让我的 jar 引用 jar 本身内的 resources
文件夹?
非常感谢任何帮助!
如果您正在使用 Spring:
org.springframework.util.ResourceUtils.getFile("classpath:readme.txt")
否则:
import com.google.common.io.Resources
byte[] byteSource = Resources.asByteSource(Resources.getResource("readme.txt")).read()
要获取您的 txt 文件:
File yourFileIsHere = new File("resources/readme.txt");
你的文件放在哪里?
在你的 jar 的相同位置,例如:
myapp/yourjar.jar
myapp/resources/readme.txt
如果您想读取“src”文件夹中的文件:
InputStream yourInputStream = new YourClass().getClass().getClassLoader().getResourceAsStream("readme.txt");
方法 class.getClass().getClassLoader().getResource()
可能需要 3 个前缀:url:
、classpath:
和 file:
每个前缀都说明了您的搜索基础。如果您想在 jar 中搜索,请使用 classpath:
前缀。这会告诉您的 classloader 在您的 classpath 中到处搜索。这是 example how to deal with it with Spring tools. Look also at ResourceLoader class 在 Spring