我想在servlet中解析xml文件,但是JVM无法指定xml文件位置时会发生异常。
这是例外
java.io.FileNotFoundException: FormFieldsNames.xml (The system cannot find the file specified)
我试图将xml文件放在项目方向,java src包和servlet包中,但所有这些尝试都得到相同的结果。
我应该在哪里找到xml文件,请提前帮助和感谢。
答案 0 :(得分:4)
从类路径中读取文件的一个常见问题是在WAR文件中获取正确的位置。
在Java中,名为MyServlet的servlet可以像这样引用文件
InputStream is=MyServlet.getClass().getResourceAsStream("/path/to/file/example.txt")
将找到存储在
下的文件WEB-INF/classes/path/to/file/example.txt
注意领先/通常会吸引人们。
应用程序容器可以从本地文件系统读取(例如,如果您想获取外部属性并且不想使用JNDI)。为此,您将使用通常的文件访问过程:
InputStream fis = FileInputStream(new File("/usr/share/myapp/another-example.txt"));
当然,如果您想将DOM指向它,那么MyServlet可能包含以下内容:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
InputStream is = MyServlet.getClass().getResourceAsStream("/path/to/my/example.xml");
Document document = documentBuilder.parse(new InputSource(is));
// And start exploring the NodeList...
NodeList nodeList = document.getFirstChild().getChildNodes();
这应该可以解决问题。
答案 1 :(得分:2)
通常的位置是:
WEB-INF/
- 由getServletContext().getResourceAsStream(..)
WEB-INF/classes
- 通过上述方式获得,或getClass().getResourceAsStream(..)
答案 2 :(得分:1)
如果您将其包含在jar / war文件中,则应该可以使用Class.getResourceAsStream
或ClassLoader.getResourceAsStream
轻松加载它。这样做而不是尝试将其作为文件系统上的实际文件加载。