2015-03-25 40 views
1

我正在使用XML文檔作爲多個相似文檔(月度報告的組織方式相同)的模板。我一直在努力尋找最通用的文件路徑。我想出了:Runnable .jar和Eclipse運行之間的行爲是非常不同的

File f1 = new File("src/Statements/TemplateStatement.xml"); 

其中/Statements/是在Eclipse中src選項卡下的文件夾,如果它只是另一個包。

然後:

File TemplateStatement = new File(f1.getAbsolutePath()); 
if (TemplateStatement.exists()) { 
    // ...do some stuff 
} else { 
    JOptionPane.showMessageDialog(null, null, 
      "ERROR: Transaction template not found.", JOptionPane.OK_CANCEL_OPTION); 

    System.exit(0); 
} 

當從Eclipse中運行,它的偉大工程,我的東西得到執行。在我的桌面(同一臺機器和文件系統)上以.jar的身份運行時,每次都打到else子句。我懷疑我缺少一個非常基本但重要的屬性,它如何打包工作空間並運行它(因爲沒有與之關聯的src目錄?)。

我沒有找到有關如何從震驚的應用程序中找到路徑,訪問,讀取,寫入,複製等文件的例子或解釋。我真的想要避免對完整路徑進行硬編碼,因爲代碼可能會在各種機器上運行。任何建議或指針,將不勝感激。

+0

歡迎來到貝爾切爾特的StackOverflow。你是如何創建你的jar文件的?你有沒有看過[這個相關的問題](http://stackoverflow.com/q/423938/983430)呢?它解釋瞭如何將eclipse項目導出爲'jar'文件,以及如何包含其他組件。 – 2015-03-25 07:45:11

+0

Jar中的對象不是文件,無法使用「文件」進行訪問。使用'Class.getResource'來訪問jar對象。 – 2015-03-25 08:11:46

回答

0

我剛剛列舉了一個類似的問題,它是由使用平臺默認編碼的java.io.FileReader函數引起的。

至於我的情況,在Runnable .jar運行中,java.io.FileReader使用ISO-8859-1編碼,而在Eclipse中使用UTF-8編碼。與

new InputStreamReader(new FileInputStream(filepath), "UTF-8") 

更換

new FileReader(filepath) 

解決我的問題。

相關問題