2014-02-19 91 views
2

我想讀取我的資源文件夾中的文本文件進行測試。我已經嘗試了至少3種不同的實現,可以在Windows上正常工作,但它們都在Linux上失敗。無法從linux上的資源加載文本文件

當前項目看起來像

/src/test/java 
    /com/my/app/util/Class_needs_text.java 
/src/test/resources 
    /com/my/app/util/text_file.txt 

Class_needs_text.java

... 
private static final String LOADTHIS = "/com/my/app/util/text_file.txt"; 
private static final String LOADTHAT = "text_file.txt"; 
// both of these work on windows, but not linux 
java.net.URL url = Class_needs_text.class.getResource(LOADTHIS); 
java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI()); 
fileContents = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8"); 

我檢查linux和文本文件被複制到兩個上構建的類文件夾目錄。 (./src/test/resources/com/my/app/util/text_file.txt到 ./target/test-classes/com/my/app/util/text_file.txt)

很抱歉,如果這是方式太冗長。懸崖:我需要在Windows和Linux中讀取位於文本文件中的資源文件夾的內容。

+0

是否使用Eclipse的一個非靜態方法?如果您正在從Eclipse運行程序,請確保將/ src/test/resources設置爲源文件夾。 –

+0

我從Maven運行。我會看看我的任何maven設置是不同的Windows與Linux。 – Rick

+0

看看您是否可以使用Class_needs_text.classgetResourceAsStream() –

回答

0

當在某個類上調用getResource()時,該類將把該調用委託給它的類加載器,但我不確定在unix和Windows JVM之間是否存在差異。不應該在操作系統上有所不同,因爲正在加載類的類加載器應該對資源具有相同的可見性。

如果您試圖在靜態方法中加載資源,您可以嘗試獲取類加載器。

Class_needs_text.class.getClassLoader().getResource(LOADTHIS); 

如果你在

this.getClass().getResource(LOADTHIS); 
+0

來閱讀這是一種靜態方法。我之前嘗試過。在Windows上,這不適用於以下任何一種:/com/my/app/util/text_file.txt,text_file.txt或/text_file.txt。我應該使用別的東西嗎? – Rick