我有一個jar文件,其中包含需要在運行時加載的資源(語言模型二進制文件)。罐子內的目錄結構是在一個jar中工作(在Netbeans中工作,但不在命令行中)
標記器/ app.class
標記器/模型/停止/ SentDetect.bin.gz
其中SentDetect.bin.gz是二進制衛生組織路徑被裝載到第三方類(SentDetector)作爲字符串參數,即
URL url = this.getClass().getResource("models/stop/SentDetect.bin.gz");
SentenceDetector sdetector = new SentenceDetector(url.getPath());
雖然它運行正常在NetBeans中,當我嘗試運行它作爲命令行罐子,我會在構造一個FileNotFound例外。我已經仔細檢查了二進制文件是否包含在已編譯的Jar文件中。
我相信解決方案通常是使用getResourceAsStream()作爲輸入流加載數據,但這不是一個選項,因爲url作爲String參數傳遞給第三方構造函數,導致我相信問題是如何將url解析爲字符串?
我曾嘗試:
url.getPath();
url.getFile();
url.toURI().getPath();
url.toString();
並且都給人以文件不同的路徑。
你的意思是我可以使用來自已加載jar的應用程序外部的URL訪問jar中的資源? – tangens 2010-01-30 15:06:51
是的一切似乎都應該在哪裏,因爲我沒有任何問題從Netbeans運行應用程序,它只會在我將它打包並在命令行上運行該jar時出現錯誤。 – pastylegs 2010-01-30 15:10:20
@tangens:如果它是另一個Java應用程序,很可能。在同一個Java應用程序中,但是不同的jar文件 - 很可能。在普通的網絡瀏覽器中?可能性更小。 – 2010-01-30 15:10:46