为什么`javax.xml.parsers.DocumentBuilder.parse(" filename.xml")`方法在操作系统的主目录中查找`XML`文件,而不是项目' s

时间:2016-04-16 07:34:59

标签: java xml eclipse servlets

以下ModifyXML Java class用于阅读XML文件并返回指定代码的所有值&#34;&#34; name&#34;属性。 对于低于XML的文件,它应返回ArrayList<String>,其中包含tc_001tc_002

<root>
    <tc name="tc_001">
    </tc>
    <tc name="tc_002">
    </tc>
</root>

首先,我使用main方法在Java中的单独Eclipse项目中创建了一个类,该方法创建了一个新的ModifyXML对象,并使用该对象调用getTCs()方法。文件结构is this。在该项目中,我直接使用文件路径作为&#34; test.xml&#34;,这在运行时不会导致错误。

public class ModifyXML {

    /*
     * constructor
     * initializing main objects
     */
    public ModifyXML() {

        //this is the file path i used
        filePath = "test.xml";              

        factory = DocumentBuilderFactory.newInstance();
        builder = factory.newDocumentBuilder();
        document = builder.parse(filePath);
    }


    /*
     *getTCs method
     */
    public ArrayList<String> getTCs(String tagType) {
        ArrayList<String> tcList = new ArrayList<>();
        String attributeName = "name";

        NodeList nodes = document.getElementsByTagName(tagType);
        int j = nodes.getLength();

        for(int i = 0; i < j; i++){
            Node tc = nodes.item(i);
            if(tc.getNodeType() == Node.ELEMENT_NODE){
                String tcName = tc.getAttributes().getNamedItem(attributeName).getNodeValue();
                tcList.add(tcName);
            }
        }

        Iterator<String> iter = tcList.iterator();
        while(iter.hasNext())
            System.out.println(iter.next());

        return tcList;
    }

public static void main(String[] args) {
        ModifyXML a = new ModifyXML();
        a.getTCs("tc");
    }

然后我将该类复制到Dynamic Web Page项目的src文件夹和test.xml文件到Dynamic Web Page项目,然后我删除了该类的主要方法。 Dynamic Web Page项目is this.的文件结构但是当我调用getTCs()方法时,在servlet service()方法中,会发生异常。

java.io.FileNotFoundException: /home/srinesh/test.xml (No such file or directory)

我使用的是Ubuntu,/home/srinesh/是我的主目录。我Dynamic Web Page项目的项目目录是/home/dazz/Projects/workspace/Sanitizor/。为什么该类只在类位于test.xml项目中时才在我的主目录中查找Dynamic Web Page文件?

Servlet课程如下所示。

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter printWriter  = response.getWriter();

    ModifyXML xml = new ModifyXML("test.xml");
    ArrayList<String> tc = xml.getTCs("tc");

1 个答案:

答案 0 :(得分:0)

使用相对路径不是一个好主意,因为有时您可能会从不同的目录运行项目。 因此要么对文件使用绝对路径("/some/path/to/your/file/file.xml"),要么使用类路径来读取它,例如:

document = builder.parse(ModifyXML.class.getResourceAsStream("/" + filePath);

在第二种情况下,您必须将文件放在类路径的根目录。