构造 URL 对象时的 Java 格式错误的 URL 异常



根据Oracle文档,我尝试构造一个URL并将其链接到HDD上的路径。我使用以下代码来执行此操作:

 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 

为什么会这样?

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

设置 html 文件的路径时,您可能缺少协议。当您尝试读取本地文件时,可以使用文件协议:

file:///{yourfilepath}

您可以使用以下方法从 Java 中的文件名获取到 URI:

new File(filename).toURI()

希望这有帮助。

不要为此使用 URL。并且不要使用File.这是2014年,我们有java.nio.file。

改用这个,它将给出一个即时、正确的结果:

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

与默认文件系统关联的方案始终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 环境变量。

最新更新