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

时间:2015-07-28 12:14:27

标签: java maven

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

访问它

答案 1 :(得分:0)

  

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

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

当您执行 mvn clean install 时,Maven构建应用程序时文件会发生什么变化。

编译 src / main / java 中的任何内容,并将这些类放在 target 目录中,并使其处于正确的包结构中。 src / main / resources 文件夹中的文件和目录将复制到同一目标目录。因此,资源成为Java程序的一部分,可在classpath上获得;例如,如果你让Maven将你的应用程序构建到一个可执行jar中,那么资源将与jar中的类一起打包

要正确加载随应用程序打包的资源文件,您应该使用Java的类加载器系统。 This question's answer详细说明了这一点。要更改当前的测试代码,您宁愿执行以下操作:

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

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