I have some text configuration file that need to be read by my program. My current code is:
protected File getConfigFile() {
URL url = getClass().getResource("wof.txt");
return new File(url.getFile().replaceAll("%20", " "));
}
This works when I run it locally in eclipse, though I did have to do that hack to deal with the space in the path name. The config file is in the same package as the method above. However, when I export the application as a jar I am having problems with it. The jar exists on a shared, mapped network drive Z:. When I run the application from command line I get this error:
java.io.FileNotFoundException: file:\Z:\apps\jar\apps.jar!\vp\fsm\configs\wof.txt
How can I get this working? I just want to tell java to read a file in the same directory as the current class.
Thanks, Jonah
When the file is inside a jar, you can't use the
File
class to represent it, since it is ajar:
URI. Instead, the URL class itself already gives you withopenStream()
the possibility to read the contents.Or you can shortcut this by using
getResourceAsStream()
instead ofgetResource()
.To get a BufferedReader (which is easier to use, as it has a
readLine()
method), use the usual stream-wrapping:Instead of "UTF-8" use the encoding actually used by the file (i.e. which you used in the editor).
Another point: Even if you only have
file:
URIs, you should not do the URL to File-conversion yourself, instead usenew File(url.toURI())
. This works for other problematic characters as well.