Java 在使用NIO2 API时消除已检查的异常

Java 在使用NIO2 API时消除已检查的异常,java,java-7,nio2,checked-exceptions,Java,Java 7,Nio2,Checked Exceptions,目前,在Guava API的帮助下,我正在使用以下代码从类路径加载属性文件: final URL fileURL = Resources.getResource("res.properties"); final File file = new File(fileURL.getFile()); 我决定尝试一下Java7SE中引入的新NIO2 API,并删除任何Guava API调用,因此我将代码转换为以下内容: final URL fileURL = getClass().getResource

目前,在Guava API的帮助下,我正在使用以下代码从类路径加载属性文件:

final URL fileURL = Resources.getResource("res.properties");
final File file = new File(fileURL.getFile());
我决定尝试一下Java7SE中引入的新NIO2 API,并删除任何Guava API调用,因此我将代码转换为以下内容:

final URL fileURL = getClass().getResource("/res.properties");
final Path path = Paths.get(fileURL.toURI());
但是修改后的代码在
URL
URI
之间发生转换的行中抛出一个选中的异常。我有没有办法摆脱它。例如,我可以使用给定的
URL
获取
Path
实例吗

另外,我知道修改后的代码在语义上与原始代码不一样-Guava的
getResource
抛出
IllegalArgumentException
如果没有找到资源,Java的
getResource
在这种情况下返回
null

您可以使用:

final File file = new File(fileURL.getFile());
final Path path = file.toPath(); //can throw an unchecked exception
您可以使用:

final File file = new File(fileURL.getFile());
final Path path = file.toPath(); //can throw an unchecked exception
以下是我的发现:

final URL fileURL = getClass().getResource("/res.properties");
final URI fileURI = URI.create(fileURL.toString());
final Path path = Paths.get(fileURI);
以下是我的发现:

final URL fileURL = getClass().getResource("/res.properties");
final URI fileURI = URI.create(fileURL.toString());
final Path path = Paths.get(fileURI);

这是一个选项,但代码变得有点不可读(或者说令人困惑)。我只想使用新的API(不使用旧的API)。顺便说一句,这提出了几个问题-为什么大多数getResource()方法返回URL,而另一方面,创建路径的工厂方法需要URI,因为文件的构造函数也需要URI?我试过了-不起作用。它在索引4处抛出InvalidPathException:非法字符。在path.get(String)的字符串参数中似乎不允许使用:符号。还有一个问题是,文档中没有足够详细地说明参数应该是什么样子的。它抛出相同的异常(但非法字符的索引不同)。这是一个选项,但代码变得有点不可读(或者说令人困惑)。我只想使用新的API(不使用旧的API)。顺便说一句,这提出了几个问题-为什么大多数getResource()方法返回URL,而另一方面,创建路径的工厂方法需要URI,因为文件的构造函数也需要URI?我试过了-不起作用。它在索引4处抛出InvalidPathException:非法字符。在path.get(String)的字符串参数中似乎不允许使用:符号。还有一个问题是,文档中没有足够详细地说明参数应该是什么样子的。它抛出相同的异常(但非法字符的索引不同)。