我的程序打成JAR包後,使用者直接雙擊JAR包運行,其中有一個功能就是向此JAR包中的一個XML文件寫數據,但是程序運行至此就報下面的錯:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException :URI is not hierarchical 
     at java.io.file.<init><Unknown Source>
     ......
報錯的程序部分為:
transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);         transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(new File(this.getClass().getResource("/xml/path.xml").toURI())));//此句報錯
StreamResult result = new StreamResult(pw);
transformer.transform(source, result);
後面查了下FILE類的源代碼找到出錯的原因:
if (uri.isOpaque())
throw new IllegalArgumentException("URI is not hierarchical");
但是我在開發環境ECLIPSE中,運行程序是正確的,後面與執行JAR時對比了下:
在程序中XML文件的URI形式為:file:/D:/Project/eclipse/MONTH_WPR/xml/path.xml
打成JAR包後我放在了C盤,在CMD命令窗口執行JAR包時XML文件的URI形式為:jar:file:/c:/mon.jar!/xml/path
報的錯是說:這個URI不是分層次的,我覺得是因為jar:file這裡有錯,在file前少了"/",難道this.getClass().getResource("/xml/path.xml").toURI()))就不能得到JAR包中文件的正確的URI嗎?
我是剛申請的號,應該沒有分給大家,所以希望大家能無私的給我些幫助。