Java中Class.getResource返回的URL是否可能为无效URI?
关于Class.getResource返回URL转URI的问题
Java语言规范没有任何保证,Class.getResource(String)返回的URL一定能成功调用toURI()而不抛出URISyntaxException。
触发异常的示例场景
当资源路径包含URI语法的特殊字符(如#、未编码的空格)时,就会出现转换失败的情况:
- 假设类路径下存在一个名为
test#config.txt的资源文件 - 执行以下代码:
URL resourceUrl = MyClass.class.getResource("test#config.txt"); URI resourceUri = resourceUrl.toURI(); // 此处会抛出URISyntaxException
原因是URL中的#会被URI解析器当作片段标识符的分隔符,而非资源路径的一部分,导致URI语法不符合规范,最终触发异常。
此外,部分类加载器实现未对资源路径中的特殊字符(如空格)做编码处理,返回的URL直接包含空格字符,这种情况下调用toURI()同样会抛出语法异常。
内容的提问来源于stack exchange,提问作者Olivier Cailloux
相关产品推荐
相关产品推荐

