java中的sysLoader.getResource()问题

我有以下代码行。

sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader(); url = sysLoader.getResource("tempFile.txt"); 

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

怎么解决这个?

编辑:更详细 – 我检查了sysloader对象。

sysloader – > UCP – > path

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

因此所有URL都为空。

怎么解决这个?

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

而不是这样做:

 FileInputStream fis = new FileInputStream(url.getFile()); 

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

 URI uri = new URI(url.toString()); FileInputStream fis = new FileInputStream(uri.getPath()); 

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

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

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

要从字符串获取文件的URL,当路径包含空格时,这对我有用:

 File file = new File("/Users/work space/tempFile.txt"); URL url = file.toURI().toURL(); 

根据Javadocs, 不推荐使用 file.toURL()

此方法不会自动转义URL中非法的字符。 建议新代码通过首先将其转换为URI,通过toURI方法,然后通过URI.toURL方法将URI转换为URL,将抽象路径名转换为URL。

因此使用了file.toURI().toURL()

对于Java 7+,可以采用这种方法:

 URL url = Paths.get("/Users/work space/tempFile.txt").toURI().toURL()); 

注意 :如果路径以/开头,则将其视为绝对,否则将其视为相对路径。