繁体   English   中英

尝试从资源文件夹中读取 txt 文件时出现 Java FileNotFoundException

[英]Java FileNotFoundException when trying to read txt file from resources folder

我正在尝试读取位于src/main/resources/test/file.txt的文本文件。 我正在尝试使用String path = getClass().getResource("/text/file.txt").getFile();获取文件的路径但是当我尝试阅读它时,我得到了 FileNotFoundException。 我尝试了许多不同的路径,但都失败了。 我怎么能 go 关于这样做?

尝试从磁盘给出文件的完整路径。

C:\Users\MyUser\Desktop\带扩展名的文件名

将某些内容放入 src/main/resources 树的想法是将其复制到您从项目构建的 JAR 文件中。 然后它将通过Class方法getResource(String)getResourceAsStream(String)方法对您的应用程序可用。

当您在开发环境中运行应用程序时,当然可以使用FileInputStream等来访问资源。 但这在生产中不起作用。 在生产环境中,资源将位于您应用的 JAR 文件中。 FileInputStream无法按名称打开 JAR 文件及其内容。

当你这样做时:

 getClass().getResource("/text/file.txt");

你会得到一个资源的 URL,它看起来像这样:

 jar:file:/path/to/your.jar!/text/file.txt"

不可能将其转换为FileInputStream可以理解的路径名。 无论您尝试什么,都会给您一个FileNotFoundException ... 或者不是您想要阅读的资源的东西。

那么该怎么办?

您有几个选项,具体取决于您的应用程序的要求。

  1. 您可以使用getResourceAsStream并直接使用生成的输入 stream。

  2. 您可以将getResourceAsStream的内容复制到临时文件中,然后使用临时文件的路径名。

  3. 您可以创建一个特定于应用程序的目录(例如,在用户的主目录中)并将您需要的文件从 JAR 提取到该目录中。 您可以在应用程序第一次运行时执行此操作。

  4. 您可以将 JAR 文件作为JarFile打开,并使用该 API 打开资源的InputStream 但这假设资源位于 JAR... 并且在某些平台(例如 Windows)上,您可能会遇到文件锁定问题。 (尝试更新JAR 中的资源是个坏主意。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM