2013-03-28 172 views
0

我有一個帶有JFileChooser的基本Java-UI。DocumentBuilder從絕對路徑解析文件

我嘗試解析本守則所選擇的文件:

Document document = builder.parse(getClass().getResourceAsStream(<SELECTED_PATH>)); 

可悲的是我得到的輸出:

java.lang.IllegalArgumentException: InputStream cannot be null 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:120) 
at wordpress2myblog.WordpressBlog.importWP(WordpressBlog.java:59) 
at wordpress2myblog.WPImportUI.jButton1MouseClicked(WPImportUI.java:165) 
at wordpress2myblog.WPImportUI.access$000(WPImportUI.java:16) 
at wordpress2myblog.WPImportUI$1.mouseClicked(WPImportUI.java:51) 
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253) 
at java.awt.Component.processMouseEvent(Component.java:6385) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) 
at java.awt.Component.processEvent(Component.java:6147) 
at java.awt.Container.processEvent(Container.java:2083) 
at java.awt.Component.dispatchEventImpl(Component.java:4744) 
at java.awt.Container.dispatchEventImpl(Container.java:2141) 
at java.awt.Component.dispatchEvent(Component.java:4572) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4289) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210) 
at java.awt.Container.dispatchEventImpl(Container.java:2127) 
at java.awt.Window.dispatchEventImpl(Window.java:2489) 
at java.awt.Component.dispatchEvent(Component.java:4572) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:710) 
at java.awt.EventQueue.access$400(EventQueue.java:82) 
at java.awt.EventQueue$2.run(EventQueue.java:669) 
at java.awt.EventQueue$2.run(EventQueue.java:667) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
at java.awt.EventQueue$3.run(EventQueue.java:683) 
at java.awt.EventQueue$3.run(EventQueue.java:681) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:680) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:205) 
at java.awt.Dialog$1.run(Dialog.java:1049) 
at java.awt.Dialog$3.run(Dialog.java:1101) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.awt.Dialog.show(Dialog.java:1099) 
at java.awt.Component.show(Component.java:1591) 
at java.awt.Component.setVisible(Component.java:1543) 
at java.awt.Window.setVisible(Window.java:843) 
at java.awt.Dialog.setVisible(Dialog.java:984) 
at wordpress2myblog.WPImportUI$3.run(WPImportUI.java:222) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:708) 
at java.awt.EventQueue.access$400(EventQueue.java:82) 
at java.awt.EventQueue$2.run(EventQueue.java:669) 
at java.awt.EventQueue$2.run(EventQueue.java:667) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:678) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

,如果我嘗試解析文件有硬編碼相對路徑的代碼作品精細。但隨着文件選擇器的路徑,這些錯誤殺死了我的程序。

+1

類路徑或文件系統中的絕對路徑? 'getClass()。getResourceAsStream'用於在類路徑中搜索。 – 2013-03-28 00:17:54

+0

如果您使用的是JFileChooser,那麼您爲什麼不使用FileInputStream,而不選擇File中的Files,這樣FileInputStream會是更好的方法? – 2013-03-28 00:22:25

+0

正如在下面的答案中所提到的,我使用了FileInputStream,現在它可以工作。謝謝你的幫助。 – 2013-03-28 00:37:23

回答

3

使用JFileChooser中的方法getSelectedFile()並使用返回的File創建InputStream。

JFileChooser chooser = new JFileChooser(); 
File file = chooser.getSelectedFile(); 
InputStream inputStream = new FileInputStream(file); 
Document document = builder.parse(inputStream); 
+0

好吧,我會試試這個。謝謝 – 2013-03-28 00:30:05

+0

好的,這工作正常。謝謝! – 2013-03-28 00:36:44