2013-07-18 89 views
0

我想用來訪問文件的類路徑,如下所示:獲取類路徑下的文件

String path = getClass().getProtectionDomain().getCodeSource() 
      .getLocation().toString(); 
    File test = new File(path); 
    File table = new File(test, "testFile.xlsx"); 

我這樣做,因爲我需要創建一個JAR,將讀取和寫入該文件,如果它位於同一個文件夾中。如果我複製並在文件瀏覽器粘貼myFilepath它帶來了我的文件

java.io.FileNotFoundException: "myFilepath" (The filename, directory name, or volume label syntax is incorrect) 

我得到這個錯誤。任何人看到我做錯了什麼,或者我可以改進我的方法嗎?

+0

您需要澄清更多問題,添加更多上下文並解釋意圖,而不僅僅是需要完成的實際「事情」。 (或我會downvote你) –

+0

@DavidHofmann我訪問一個Excel電子表格。我編輯這個電子表格的內容。我將此電子表格的更改保存到原始文件。此應用程序適用於非開發人員。他需要能夠運行可執行文件,然後打開電子表格來查看數據。這是所有的背景,而不是下/投票我非常感謝一些見解。 – PandaBearSoup

+0

所以你在一個jar中分發的java swing應用程序。該應用程序應該在加載它的文件系統中打開一個文件,修改該文件並保存它。是嗎? –

回答

0

您無法訪問類路徑中的文件,但可以從類路徑中獲取資源流並從中讀取內容。您需要查看此答案https://stackoverflow.com/a/1464366/39998

+1

如果我按照你的建議以這種方式訪問​​文件: InputStream stream = Test.class.getResourceAsStream(「/ SomeTextFile.txt」); 我該如何創建一個FileOutputSteam來將更改寫入此文件? – PandaBearSoup

+0

通常情況下,你閱讀你的jar裏面的一些文件的內容(這就是我們所說的資源)。之後你想要做什麼,修改jar裏面的文件? –

+0

執行程序後需要訪問該文件。 – PandaBearSoup

1

而不是嘗試獲取類路徑名稱,創建一個File對象,然後使用getAbsolutePath()方法獲取其絕對路徑。這將給出運行代碼的源文件的路徑。

請嘗試下面的代碼: -

java.io.File f = new java.io.File("H"); 
     String path; 
     path = f.getAbsolutePath(); 
     path = path.substring(0, (path.length() - f.getName().length())); 
     f.deleteOnExit(); 

其中字符串路徑則包含類文件的目錄路徑。

+0

http://stackoverflow.com/questions/2837263/how-do-i-get-the-directory-that-the-currently-executing-jar-file-is-in 我試過這種方法,得到了相同的錯誤。 – PandaBearSoup

+0

請嘗試上面的代碼,看看是否使用「路徑」變量獲取絕對類文件路徑,而不使用類名稱。 –

+1

這將我帶到了項目文件夾中,該文件包含在src/main/resources中。如果將文件放在與jar相同的文件夾中,我將如何完成這項工作? – PandaBearSoup