sysLoader.getResource() problem in java

你离开我真会死。 提交于 2019-11-28 10:41:49
snoopygee

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());
libor

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!