当前位置: 代码迷 >> java >> Maven:无法从资源文件夹中读取文件
  详细解决方案

Maven:无法从资源文件夹中读取文件

热度:48   发布时间:2023-08-04 09:06:26.0
Package
|
|------src/main/java
|------resources
            |---- config.properties

pom.xml中 ,我设置了resoucres目录,如下所示

<resources>
        <resource>
            <directory>resources</directory>
        </resource>
</resources>

我可以获取文件的绝对路径。 但是,当我尝试读取或检查它是文件还是目录时,它返回false。

sample.java

File configFile =  new File("config.properties");               
        System.out.println("PATH="+newFile.getAbsolutePath());
        System.out.println("IsFile="+newFile.isFile());
       System.out.println("CanRead="+configFile.canRead());

输出量

PATH=D:\JCB\MyWorkSpace_LunaJEE\MessageProcessor\config.properties
IsFile=false
CanRead=false

任何帮助将不胜感激。

该文件不在D:\\JCB\\MyWorkSpace_LunaJEE\\MessageProcessor\\config.properties ,但不在该resources文件夹中,因此它不存在,因此既不是文件也不是目录。 我建议将其放在/src/main/resources ,然后通过getResourceAsStream( name );进行访问getResourceAsStream( name );

在pom.xml中,我设置了resoucres目录,如下所示

这定义了将资源存储为Maven构建结构的一部分的目录-因此它指定Maven应该在哪里寻找要包含在程序中的资源文件。 它没有定义在运行应用程序时可以在哪里找到文件的位置。 更改Maven约定并不是一个好主意,如果可以的话,将其保留为src / main / resources 如果在Maven上使用外部工具,则可能会发生冲突。

重要的部分是当您执行mvn全新安装时,当Maven构建应用程序时,文件会发生什么。

编译src / main / java中的所有内容,并以适当的包结构将这些类放在目标目录中。 src / main / resources文件夹中的文件和目录被复制到同一目标目录。 这样,资源就成为Java程序的一部分,并且可以在 ; 例如,如果让Maven在此时将应用程序构建到可执行jar中,则资源将与该jar中的类一起打包。

为了正确地加载与应用程序一起打包的资源文件,您应该使用Java的类加载器系统。 详细说明了这一点。 要更改当前的测试代码,您希望执行以下操作:

InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties");

if(is != null){
  // yep, the file exists on the classpath! Now load it with the InputStream
}