sysLoader.getResource() java 中的问题

2022-09-01 06:44:16

我有以下代码行。

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

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

如何解决这个问题?

编辑:更详细地 - 我检查了系统加载器对象。

sysloader -> UCP -> path

路径的字符为 %20 而不是空格

因此,所有 URL 都为空。

如何解决这个问题?


答案 1

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

而不是这样做:

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

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

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

答案 2

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

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

还要记住,当资源位于jar文件中时,您必须以不同的方式处理它。例如,在这里看到它:如何访问jar中的资源,它可以存在于多个jar中