尝试从资源文件夹读取txt文件时发生Java FileNotFoundException

尝试从资源文件夹读取txt文件时发生Java FileNotFoundException,java,resources,Java,Resources,我试图读取位于src/main/resources/test/file.txt中的文本文件。我试图使用String path=getClass().getResource(“/text/file.txt”).getFile()获取文件的路径但是当我尝试读取它时,我得到一个FileNotFoundException。我尝试了许多不同的途径,但都失败了。如何执行此操作?尝试从磁盘提供文件的完整路径 C:\Users\MyUser\Desktop\file name和扩展名将某些内容放入src/mai

我试图读取位于
src/main/resources/test/file.txt
中的文本文件。我试图使用
String path=getClass().getResource(“/text/file.txt”).getFile()获取文件的路径但是当我尝试读取它时,我得到一个FileNotFoundException。我尝试了许多不同的途径,但都失败了。如何执行此操作?

尝试从磁盘提供文件的完整路径


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

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

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

执行此操作时:

 getClass().getResource("/text/file.txt");
您将获得该资源的URL,该URL如下所示:

 jar:file:/path/to/your.jar!/text/file.txt"
无法将其转换为
FileInputStream
可以理解的路径名。无论您尝试什么,都会出现
FileNotFoundException
。。。或者不是你想要阅读的资源

那怎么办呢

根据应用程序的要求,您有几个选项

  • 您可以使用
    getResourceAsStream
    并直接使用生成的输入流

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

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

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


  • 通常,执行不会在源目录中进行。您至少需要设置IDE,以便它将您的文件视为资源(在部署过程中它可以将其复制到正确的位置)。给出绝对路径是可行的,但我猜想,当我编译时,这将是无效的。您可以通过这种方式获得最佳的开发环境资源文件的路径名。这并不能解决OP的问题。