我遇到的一个常见情况是,我想对项目中的本地资源执行一些IO操作。访问本地资源的最简单方法是返回URL的getClass().getResource("path")
。* IO东西最简单的方法是通过Files.XXX
,这通常需要java.nio.Path
。
将URL转换为路径很容易:Paths.get(url.toURI())
。可悲的是,这可能会抛出一个URISyntaxException
,我现在必须抓住。我不明白为什么,这很烦人,丑陋,我从来没有得到,我讨厌它。
现在的问题是:是否存在其他方法来访问本地资源作为Path或将URL转换为Path而不会引发异常?
getResourceAsStream()
,但是简单的InputStream
通常是不够的。答案 0 :(得分:1)
查看URL.toURI()
的Javadoc,您将看到:
返回与此
URL
等效的URI
。此方法的功能与new URI (this.toString())
相同。...
该方法与调用URI(String)
构造函数相同,后者是可能的URISyntaxException
的来源。但是,如果您查看URI
类,则会发现一个静态工厂方法:URI.create(String)
。此方法的Javadoc指出:
通过解析给定的字符串来创建
URI
。此便捷工厂方法的工作方式类似于调用
URI(String)
构造函数;捕获由构造函数引发的任何URISyntaxException
并将其包装在新的IllegalArgumentException
对象中,然后将其引发。...
这意味着URL.toURI()
和URI.create(String)
都呼叫new URI(String)
。区别在于URI.create(String)
会抛出 unchecked IllegalArgumentException
,这意味着您不必在所有地方都使用try-catch
块。您可以使用以下内容:
URL resource = getClass().getResource("/path/to/resource");
Path path = Paths.get(URI.create(resource.toString()));
答案 1 :(得分:-2)
URL url=getClass().getResource("/getresources/test.txt");
File f=new File(url.toURI());
尝试一下。