2016-05-17 73 views
-1

所以我正在嘗試使用GUI Java,並且此代碼工作正常,只要我嘗試在我的終端中運行我的代碼,但是我需要創建一個可以加載文本文件的jar文件從任何目錄(遺憾的是,這個代碼只適用於我的主目錄中的文件 ,如果我嘗試訪問來自不同文件夾的文件,它將返回一個文件異常)真的很感激迴應。我不知道這是否重要,但我正在實現一個可序列化的接口。getAbsolutePath()不工作在Jar文件

public boolean loadCanvas(String filename){ 
     boolean done = true; 
     try{ 
      File file = new File(filename); 
      FileInputStream fp = new FileInputStream(file.getAbsolutePath()); 
      ObjectInputStream i = new ObjectInputStream(fp); 
      obj = (A) i.readObject(); 
      i.close(); 
     } 
     catch(Exception eRef){ 
      done = false; 
     } 
     return done;  
    } 
+0

您無法從JAR以這種方式加載文件;你必須使用類加載器來獲取ResourceAsStream。 – duffymo

+0

你'System.err.println(file.getAbsolutePath())'並檢查路徑嗎?然後,至少將'eRef.printStackTrace()'添加到您的異常處理程序中 - 目前您正在忽略所有異常。 –

+0

@duffymo他說他想從任何**目錄**加載文本文件... –

回答

0

您可以嘗試使用ClassLoader.getResourceAsStream()來加載文件。另外, 您是否檢查了您嘗試訪問主目錄之外的文件的權限?

+1

這不會'從任何目錄'工作。它只能在JAR文件中使用。目前尚不清楚OP的實際問題是什麼,但這個解決方案不同意這個問題。 – EJP

1

你不應該打電話getAbsolutePath()。字符串變量文件名應包含您嘗試訪問的完整路徑。您可以使用File對象或僅字符串,文件名(例如new FileInputStream(file)new FileInputStream(filename))實例化FileInputStream。這就是說,這聽起來像你的問題是,你有一個不正確的文件路徑在你的文件名變量中指定,或者你正在運行權限限制。

相關問題