生成文件的URL

Dón*_*nal 9 java

默认输出File.toURL()

file:/c:/foo/bar
Run Code Online (Sandbox Code Playgroud)

这些似乎不适用于Windows,需要更改为

file:///c:/foo/bar
Run Code Online (Sandbox Code Playgroud)

格式化吗

file:/foo/bar
Run Code Online (Sandbox Code Playgroud)

在Unix上正常工作(我没有Unix机器进行测试)?是否有一个库可以处理从当前环境格式正确的文件生成URL?

我考虑使用正则表达式来解决问题,例如:

fileUrl.replaceFirst("^file:/", "file:///")
Run Code Online (Sandbox Code Playgroud)

但是,这不太对,因为它会转换正确的URL,如:

file:///c:/foo/bar
Run Code Online (Sandbox Code Playgroud)

至:

file://///c:/foo/bar
Run Code Online (Sandbox Code Playgroud)

更新

我使用的Java 1.4和在这个版本File.toURL()没有弃用,都File.toURL().toString()File.toURI().toString()产生的窗口相同(不正确)网址

Bal*_*usC 12

File(String)需要一个路径,而不是URL.如果你想构建一个File基于String实际代表一个URL的,那么你需要将它转换StringURL第一个并利用File(URI)它构建File基于URL#toURI().

String urlAsString = "file:/c:/foo/bar";
URL url = new URL(urlAsString);
File file = new File(url.toURI());
Run Code Online (Sandbox Code Playgroud)

更新:因为你使用的是Java 1.4并且URL#toURI()实际上是一个Java 1.5方法(抱歉,忽略了这一点),所以最好使用URL#getPath()返回路径名,以便你可以使用File(String).

String urlAsString = "file:/c:/foo/bar";
URL url = new URL(urlAsString);
File file = new File(url.getPath());
Run Code Online (Sandbox Code Playgroud)


ape*_*ins 6

不推荐使用File.toURL()方法 - 建议您改用toURI()方法.如果你改用它,你的问题会消失吗?


编辑:

我理解:您使用的是Java 4.但是,您的问题没有解释您尝试做什么.如果您在注释中声明,您试图只是读取文件,请使用FileReader执行此操作(如果文件是二进制格式,则使用FileInputStream).

  • +1 - 它有助于阅读javadocs ... http://java.sun.com/javase/6/docs/api/java/io/File.html#toURL() (3认同)