I am having following lines of code.
sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
url = sysLoader.getResource(\"tempFile.txt\"
This is known by Sun/Oracle, their advice is to use URI objects which will remove the %20 characters:
Instead of doing this:
FileInputStream fis = new FileInputStream(url.getFile());
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:
URI uri = new URI(url.toString());
FileInputStream fis = new FileInputStream(uri.getPath());
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:
File file = new File("/Users/work space/tempFile.txt");
URL url = file.toURI().toURL();
According to Javadocs, file.toURL()
is deprecated:
This method does not automatically escape characters that are illegal in URLs. It is recommended that new code convert an abstract pathname into a URL by first converting it into a URI, via the toURI method, and then converting the URI into a URL via the URI.toURL method.
Hence used file.toURI().toURL()
.
For Java 7+, this is approach can be taken instead:
URL url = Paths.get("/Users/work space/tempFile.txt").toURI().toURL());
Note: If the path begins with a /
it is considered absolute else taken as a relative path.