I have the following structure for my project.
In Eclipse:
myPorjectName
src
com.example.myproject
a.java
com.example.myproject.data
b.xml
In a.java
, I want to read b.xml
file. How can I do that? Specifically, in a.java
, I used the following code:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));
This code cannot find b.xml
. However, if I change the path to src/com/example/myproject/data/b.xml
then it works. The current location seems to be in the root of my project file.
But I see other people's examples, if b.xml
and a.java
are in the same folder, then we can directly use new File("b.xml")
. But I try putting b.xml
in the same folder of a.java
rather than putting in the sub folder, but it still does not work. If this works, then in my case, I should be able to use new File("data/b.xml")
, right? I really do not understand why this is not working.
If it is already in the classpath and in the same package, use
URL url = getClass().getResource("b.xml");
File file = new File(url.getPath());
OR , read it as an InputStream
:
InputStream input = getClass().getResourceAsStream("b.xml");
Inside a static
method, you can use
InputStream in = YourClass.class.getResourceAsStream("b.xml");
If your file is not in the same package as the class you are trying to access the file from, then you have to give it relative path starting with '/'
.
ex : InputStream input = getClass().getResourceAsStream
("/resources/somex.cfg.xml");which is in another jar resource folder