2013-05-01 94 views
7

我对我的项目有以下结构。Java的文件路径或文件位置 - 新文件()

在Eclipse:

myPorjectName 
    src 
    com.example.myproject 
     a.java 
    com.example.myproject.data 
     b.xml 

a.java,我想读b.xml文件。我怎样才能做到这一点?具体而言,在a.java,我用下面的代码:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse (new File("data/b.xml")); 

此代码不能找到b.xml。但是,如果我将路径更改为src/com/example/myproject/data/b.xml,那么它的工作原理。当前位置似乎在我的项目文件的根目录中。

但我看到别人的例子,如果b.xmla.java在同一个文件夹中,那么我们就可以直接使用new File("b.xml")但我尽量把b.xmla.java同一文件夹中,而不是将在子文件夹中,但它仍然不起作用。如果这有效,那么在我的情况下,我应该可以使用new File("data/b.xml"),对吧?我真的不明白为什么这不起作用。

+2

它最有可能会更喜欢'的getClass()getResourceAsInputStream( “/ COM /例子/ myproject的/数据/ B.XML”);' – MadProgrammer 2013-05-01 05:38:05

+0

它不工作,因为你的**默认目录(即java正在执行)**是'myPorjectName'它不在'myproject'中 – xagyg 2013-05-01 05:43:00

+0

xagyg和MadProgrammer的评论让我明白为什么我做错了。感谢你们。以下答案让我学到更多东西。 – Joey 2013-05-01 06:17:07

回答

17

如果它已经在类路径和在同一个包,使用

URL url = getClass().getResource("b.xml"); 
File file = new File(url.getPath()); 

OR,读它作为一个InputStream

InputStream input = getClass().getResourceAsStream("b.xml"); 

里面一个static方法,你可以使用

InputStream in = YourClass.class.getResourceAsStream("b.xml"); 

如果你的文件是不是在同一个包,你试图ACC类从该文件,然后你必须给它的相对路径从'/'开始。

ex : InputStream input = getClass().getResourceAsStream 
      ("/resources/somex.cfg.xml");which is in another jar resource folder 
+0

我认为这是最好的方法! – buch11 2013-05-01 05:44:10

+0

如果它不在同一个包中,该怎么办?在我的例子中,a.java在com.example.myproject中。 b.xml位于com.example.myproject.data中。 – Joey 2013-05-01 05:47:10

+1

我编辑了答案。 – NINCOMPOOP 2013-05-01 05:47:25