如果我想在java servlet中解析它,我应该在哪里找到xml文件

时间:2010-11-27 22:34:47

标签: java xml servlets

我想在servlet中解析xml文件,但是JVM无法指定xml文件位置时会发生异常。

这是例外

java.io.FileNotFoundException: FormFieldsNames.xml (The system cannot find the file specified)

我试图将xml文件放在项目方向,java src包和servlet包中,但所有这些尝试都得到相同的结果。

我应该在哪里找到xml文件,请提前帮助和感谢。

3 个答案:

答案 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.getResourceAsStreamClassLoader.getResourceAsStream轻松加载它。这样做而不是尝试将其作为文件系统上的实际文件加载。