问题描述
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
任何帮助将不胜感激。
1楼
该文件不在D:\\JCB\\MyWorkSpace_LunaJEE\\MessageProcessor\\config.properties
,但不在该resources
文件夹中,因此它不存在,因此既不是文件也不是目录。
我建议将其放在/src/main/resources
,然后通过getResourceAsStream( name );
进行访问getResourceAsStream( name );
2楼
在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
}