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
任何帮助将不胜感激。
答案 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
}