I am having following lines of code.
sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
url = sysLoader.getResource("tempFile.txt");
It is giving an weird problem. If I run this from a path where there is no space in the path (Folder names) then it is running fine. But if the path contains any spaces (line "c:\New Foler...") then it is not working.
How to solve this?
EDIT: In more detail - I inspected the sysloader object.
sysloader -> UCP -> path
Is having a path with character %20 instead of space
And therefore all the URLs are null.
How to resolve this?
This is known by Sun/Oracle, their advice is to use URI objects which will remove the %20 characters:
Instead of doing this:
you can force any %-escaped characters to be decoded by first converting the URL to a URI, and then use the path component of the URI as the filename:
Use
URLDecoder.decode()
method to replace%20
characters by spaces.String path = URLDecoder.decode(url.getPath(), "UTF-8");
Please also keep in mind that when resource is located in jar file you have to handle it different way. See it e.g. here: How to access resources in jar where it can be present in multiple jar
To get the URL of the file from string, when the path contains spaces, this is what worked for me:
According to Javadocs,
file.toURL()
is deprecated:Hence used
file.toURI().toURL()
.For Java 7+, this is approach can be taken instead:
Note: If the path begins with a
/
it is considered absolute else taken as a relative path.