2017-05-02 33 views
0
private static final String FILE_PATH = "MessageCompare\\src\\main\\resources\\json\\test.json";` 

File file = new File(FILE_PATH); 

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file.getAbsolutePath())));` 

上獲得的資源在我的電腦,file.getAbsolutePath()返回
d:\開發\工具\ MessageCompare \ MessageCompare的\ src \主\資源\ JSON \ test.json用Java DIFF計算機

在其他計算機,file.getAbsolutePath()返回
d:\開發\工具\ MessageCompare的\ src \主\資源\ JSON \ test.json

爲什麼的文件返回絕對路徑,一個比別人更多的節點' 電腦?

+0

檢查兩臺計算機的文件夾結構。我認爲你的工作區有兩種不同的設置方式。 – kkflf

+0

你的路徑不是絕對的,因此它會根據當前的工作目錄解決,這可能會有所不同。 – Holger

回答

0

使用相對路徑來保證跨平臺可能會更好。

通常情況下,兩種方式獲取資源。

  1. 的getClass()的getResourceAsStream()< 非靜態方法> & xxx.Class.getResourceAsStream()< 靜態方法>
  2. 的getClass ().getClassLoader()。getResourceAsStream()< 非靜態方法> & xxx.Class.getClassLoader()。getResourceAsStream()< 靜態法>

有什麼區別? Please notice this structure

  1. 關於#1,它使用: 的InputStream在=的getClass()的getResourceAsStream( 「/ JSON/rti.json」);。
  2. 對於#2,它使用:在的InputStream =的getClass()getClassLoader()的getResourceAsStream( 「JSON/rti.json」);。。
0

由於這個原因,您不應該依賴文件的絕對路徑,這完全取決於其他人運行代碼的位置。在你的情況下,有一個額外的MessageCompare目錄。

相反,使用類加載器加載該文件:

MyClass.class.getResourceAsStream("/myFile.txt");

這樣,你的代碼會更加便攜。

0
File file = new File(FILE_PATH); 

此行創建一個文件。該文件的路徑取決於您的項目文件夾和設置。如果您的工作站包含名爲「MessageCompare」的另一個文件夾,並且您的項目在該文件夾中設置,則可能是您獲得額外節點的原因。