Java 尝试从资源文件夹读取 txt 文件时出现 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。我尝试了很多不同的路径,但都失败了。我该怎么做呢?

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

C:\Users\MyUser\Desktop\file 扩展名

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

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

当你这样做时:

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

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

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

无法将其转换为 FileInputStream 能够理解的路径名。无论您尝试什么,都会给您一个 FileNotFoundException ... 或一些您不想阅读的资源。

那怎么办?

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

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

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

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

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