生成文件的URL

时间:2010-05-07 14:21:45

标签: java

File.toURL()的默认输出为

file:/c:/foo/bar

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

file:///c:/foo/bar

格式是否

file:/foo/bar

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

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

fileUrl.replaceFirst("^file:/", "file:///")

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

file:///c:/foo/bar

为:

file://///c:/foo/bar

更新

我正在使用Java 1.4,并且此版本File.toURL()未被弃用,File.toURL().toString()File.toURI().toString()在Windows上生成相同(不正确)的网址

3 个答案:

答案 0 :(得分:12)

File(String)需要路径名,而不是网址。如果您想根据实际代表网址的File构建String,那么您需要首先将此String转换回URL并使用File(URI)根据URL#toURI()构建File

String urlAsString = "file:/c:/foo/bar";
URL url = new URL(urlAsString);
File file = new File(url.toURI());

更新,因为你使用的是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());

答案 1 :(得分:5)

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


编辑:

我理解:您使用的是Java 4.但是,您的问题没有解释您尝试做什么。如果您在评论中说明,您试图只是阅读文件,请使用FileReader(如果文件是二进制格式,则使用FileInputStream)。

答案 2 :(得分:1)

你真正的意思是“格式file:/c:/foo/bar在Unix上是否正常工作”?

Unix的一些例子。

File file = new File("/tmp/foo.txt"); // this file exists
System.out.println(file.toURI()); // "file:/tmp/foo.txt"

然而,你不能,例如这样做:

File file = new File("file:/tmp/foo.txt");
System.out.println(file.exists()); // false

(如果您需要URL个实例,请file.toURI().toURL()作为Javadoc says

修改:以下内容如何,​​有帮助吗?

URL url = new URL("file:/tmp/foo.txt");
System.out.println(url.getFile());  // "/tmp/foo.txt"
File file = new File(url.getFile());
System.out.println(file.exists());  // true

(基本上非常接近使用new File(url.toURI())的BalusC的例子。)