2011-09-26 54 views
0

好的我正在使用Eclipse開發一個需要讀取文本文件的程序。這個想法是將JAR和文本文件放在同一個文件夾中。所以我得到的文本文件的路徑是這樣的:在Linux中將Java URL轉換爲有效的文件路徑

Client.class.getClassLoader().getResource("Client.class"); 

這正確返回的路徑和我追加的文件名,並獲得以下路徑:當我出口我的項目

/home/marquinio/workspace/my_project/info.txt 

問題是到一個可執行的JAR文件中。 JAR無法讀取文件。我加倍檢查,一切都很好。我看到的唯一的問題是,現在的路徑有一些「文件:」開頭附加這樣的:

file:/home/marquinio/workspace/my_project/info.txt 

這可能是爲什麼我得到一個「FileNotFoundException異常」。 JAR和文本文件都在同一個文件夾中。

任何人都知道如何解決這個問題?爲什麼在命令提示符下Java和Eclipse之間執行JAR的行爲會有所不同? 是否有替代Java提供的「... getResource(...)」沒有「file:」?

注意:此JAR還應該在Windows環境中兼容。仍然需要測試它。

在此先感謝。

+0

一種可能性:在調用作爲文本文件路徑的jar時傳入命令行參數。 –

+1

*「需要讀取文本文件」*如果不需要將**寫入文本文件,請將其放入Jar並使用'getResource(String)'獲取URL。該URL不能用於'Desktop.open(文件)',但有'Desktop.browse(URI)'和許多其他方式來顯示文本文件在幾行代碼中。 –

+0

糟糕!我剛剛意識到'Desktop.browse(URI)'將無法使用Jar中的資源。我多麼愚蠢。不過,其他方面還有'JEditorPane.setPage(URL)'。將JEP放入'JScrollPane'中,爲其設置一個合理的首選大小,並使用'JOptionPane'顯示它。大約5-10行代碼。這裏是一個[簡短示例](http://stackoverflow.com/questions/7158435/java-opening-a-resource-txt-file-which-is-in-a-jar-with-os-standard-applicatio/ 7165320#7165320)。 –

回答

1

您所指的資源不保證是文件系統上的文件。爲什麼不使用ClassLoader#getResourceAsStream()?沒有研究細節,我最好的猜測是你看到的不同行爲是因爲在上面的每種情況下都使用了不同的類加載器。