java中的sysLoader.getResource()问题

Vis*_*hal 30 java url classloader

我有以下代码行.

sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
url = sysLoader.getResource("tempFile.txt");
Run Code Online (Sandbox Code Playgroud)

它给出了一个奇怪的问题.如果我从路径中没有空格的路径(文件夹名称)运行它,那么它运行正常.但是如果路径包含任何空格(行"c:\ New Foler ...")那么它就不起作用了.

怎么解决这个?

编辑:更详细 - 我检查了sysloader对象.

sysloader - > UCP - > path

是否有一个字符%20而不是空格的路径

因此,所有URL都为空.

怎么解决这个?

小智 39

这是Sun/Oracle所知,他们的建议是使用URI对象来删除%20个字符:

而不是这样做:

FileInputStream fis = new FileInputStream(url.getFile());
Run Code Online (Sandbox Code Playgroud)

您可以通过首先将URL转换为URI来强制解码任何%-escaped字符,然后使用URI的路径组件作为文件名:

URI uri = new URI(url.toString());
FileInputStream fis = new FileInputStream(uri.getPath());
Run Code Online (Sandbox Code Playgroud)

  • 没有显式转换为字符串并返回URI的较短版本将是:`URI uri = url.toURI();``FileInputStream fis = new FileInputStream(uri.getPath());` (5认同)
  • 这是标记为“无法修复”的相应但报告:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4466485。这个错误/特性在 Java 1.7 中仍然存在。 (2认同)

小智 10

使用URLDecoder.decode()方法%20用空格替换字符.

String path = URLDecoder.decode(url.getPath(), "UTF-8");

还请记住,当资源位于jar文件中时,您必须以不同的方式处理它.请参阅此处:如何访问jar中的资源,它可以存在于多个jar中