将URL转换为Path而不会引发异常

时间:2018-08-19 16:51:52

标签: java url path nio

我遇到的一个常见情况是,我想对项目中的本地资源执行一些IO操作。访问本地资源的最简单方法是返回URL的getClass().getResource("path")。* IO东西最简单的方法是通过Files.XXX,这通常需要java.nio.Path

将URL转换为路径很容易:Paths.get(url.toURI())。可悲的是,这可能会抛出一个URISyntaxException,我现在必须抓住。我不明白为什么,这很烦人,丑陋,我从来没有得到,我讨厌它。

现在的问题是:是否存在其他方法来访问本地资源作为Path或将URL转换为Path而不会引发异常?


  • 我知道也有getResourceAsStream(),但是简单的InputStream通常是不够的。

2 个答案:

答案 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());

尝试一下。