DocumentBuilder从绝对路径解析文件
问题描述:
我有一个带有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)
,如果我尝试解析文件有硬编码相对路径的代码作品精细。但随着文件选择器的路径,这些错误杀死了我的程序。
答
使用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
类路径或文件系统中的绝对路径? 'getClass()。getResourceAsStream'用于在类路径中搜索。 – 2013-03-28 00:17:54
如果您使用的是JFileChooser,那么您为什么不使用FileInputStream,而不选择File中的Files,这样FileInputStream会是更好的方法? – 2013-03-28 00:22:25
正如在下面的答案中所提到的,我使用了FileInputStream,现在它可以工作。谢谢你的帮助。 – 2013-03-28 00:37:23