Java MalformedURL构造URL对象时的异常

时间:2014-12-18 05:58:16

标签: java file url

基于Oracle documentation我试图构建一个URL并将其链接到我的硬盘上的路径。我使用以下代码:

 String path = home+ File . separator + " dict ";
 URL url = new URL(" file ", null , path );

但是,虽然在Oracle文档中,可以说file可以是第一个参数的协议之一,但它在实际中给了我以下异常:

Exception in thread "main" java.net.MalformedURLException: unknown protocol:  file 

为什么会这样?

3 个答案:

答案 0 :(得分:1)

您的字符串中有额外的空格:URL url = new URL("file", null , path );

答案 1 :(得分:1)

不要使用URL。并且don't use File。这是2014年,我们有java.nio.file。

使用它,它会立即给出正确的结果:

final URL url = Paths.get(home, "dict").toUri().toURL();

default filesystem相关联的方案总是 file

另外,为什么是URL而不是URI?请注意,您的代码无法在Windows上运行(您无法在URI的路径组件中使用反斜杠)。


编辑:看来您使用的手册也有很多错误;首先,它假设一个Unix系统!

您遇到的一个问题是您的系统上未设置WNHOME环境变量;因此,您获得的路径是您当前的目录,加上null,加上"dict"

将您的代码更改为:

final String wnhome = System.getenv("WNHOME");
if (wnhome == null)
    throw new IllegalStateException("WNHOME environment variable is not set");
final URL url = Paths.get(wnhome, dict).toUri().toURL();

通常你会看到一个异常......你可以在这里设置WNHOME环境变量。

答案 2 :(得分:0)

在设置html文件的路径时,可能会丢失协议。在尝试读取本地文件时,可以使用文件协议:

file:///{yourfilepath}

您可以使用

从Java中获取文件名到URI
new File(filename).toURI()

希望这有帮助。