19

here is the structure of my project.

proj ---src ----main ----java ----Main.java ----resources ----res.txt 

I am using m2eclipse plugin with Eclipse. In Main.java, I have

File f = new File("res.txt"); System.out.println(f.getAbsolutePath()); 

When I run mvn exec:java, the path got printed out is "...\proj\res.txt". How can I make it look for the resource file in "...\proj\target\classes" directory?

EDIT:

Thanks for the answers to my original question. I have a follow-up questions:

So basically what I want to do is to have the Main class read the "res.txt" and then generate a new "newres.txt" to the resources directory so that I can package this new "newres.txt" to the jar file in the package phase later. Currently I mounted this exec:java to the prepare-package phase. How should I create this "newres.txt" in the resources directory without a hard-coded absolute path or depending on the directory structure of Maven?

5 Answers 5

20

I guess I will answer my own question, Thread.currentThread().getContextClassLoader().getResourceAsStream() works the best for me, especially when the project produces a jar dependency for another web project.

Sign up to request clarification or add additional context in comments.

1 Comment

You are the best! THANK YOU
16

Figure I'd add to the answers.

You can also use:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt"); 

1 Comment

This solved my problem for me! Thank you so much for taking the time to write this solution up!!!
12

Try

InputStream IS = Main.class.getResourceAsStream("res.txt"); 

to access the content of res.txt. Pay attention to the encoding of your text file (beware of defaults). If your maven project is set on UTF-8 for example, make sure res.txt is encoded in UTF-8 too, otherwise, you'll get funny errors at runtime.

2 Comments

More on this in a blog post I created recently: tshikatshikaaa.blogspot.nl/2012/07/…
See javaworld.com/javaqa/2003-08/01-qa-0808-property.html?page=2 about when to use a leading '/' for the resource path.
1

When run from eclipse, res.txt is created in/reader from the folder where eclipse is started. Hence the output.

If you want to make the code look at the file in a specific folder, which is present in your classpath, then you should try using getResourceAsStream() method.

Alternately you can specify the absolute path of the file.

Comments

1

Here is anther solution:

String str = "target/classes/res.txt"; InputStream is = new FileInputStream(new File(str)); 

If you exec java in root folder, and you resource will compile to target/classes folder, you can write you code like this.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.