2015-07-28 95 views
0
Package 
| 
|------src/main/java 
|------resources 
      |---- config.properties 

的pom.xml文件,我已經設置resoucres目錄如下Maven的:無法讀取資源文件夾

<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);

0

訪問它在pom.xml中,我已經設置resoucres目錄如下

用於定義資源將被存儲爲部分目錄Maven構建結構 - 因此它指定Maven應該在哪裏尋找資源文件以包含在程序中。它沒有定義在運行應用程序時可以找到哪些文件。如果可以的話,更改Maven約定並不是一個好主意,請將其保留爲src/main/resources。如果您在Maven之上使用外部工具,則可能會發生衝突。

什麼是重要的部分是什麼與文件時發生什麼,當你做的應用程序由Maven,例如mvn乾淨安裝

無論是在的src/main/java的編譯和類放在目標目錄,以正確的封裝結構。將src/main/resources文件夾中的文件和目錄複製到同一個目標目錄。這些資源因此成爲您的Java程序的一部分,可在classpath上找到;例如,如果您想讓Maven在此時將您的應用程序構建到可執行的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 
}