将本地文件传递到Java中的URL


Answers:


282
new File(path).toURI().toURL();

20
对于Java 7+:Paths.get(“ path”,“ to”,“ stuff”)。toUri()。toURL()
Ajax

44

使用Java 7:

Paths.get(string).toUri().toURL();

但是,您可能想要获得一个URI。例如,a URI开头,file:///但URL 开头file:/(至少是这样toString产生的)。


“ ... URI以文件:///开头,但URL以文件// ...” Windows和Linux是否都是这种情况?
ptntialunrlsd 2015年

@ptntialunrlsd这是一个很好的问题。我没有检查,但是我猜是的。
Aleksandr Dubinsky

5
否。URL只是URI的一种特殊情况。文件URI以“ file://”开头,然后列出主机(通常省略),后跟“ /”和路径“ foo / bar”(通常表示为绝对路径)。因此是“ file:/// foo / var”。看起来像“ file:/ foo / bar”的URI不正确。另请参阅:文件URI方案
David Tonhofer 2015年

@DavidTonhofer感谢您对URI的解释,但这不能回答ptntialunrlsd的问题。在Linux上,“ ... toURL()。toString()”会产生什么?另外,我恢复了您的修改,因为它们使我的回答更加罗word,没有改变含义。
Aleksandr Dubinsky 2015年

3
@AleksandrDubinsky最好还是保留指向Oracle javadoc的指针java.nio.file.Paths。另外,请务必弄清楚你的意思是实现在“URI VS URL”。Anway java.net.URL.toString()必须在Unix上产生相同的结果。它仅显示一个非常错误的 “ /” (请参阅文件URI scheme)。我猜这是在Java中,由于某种原因,更好地使用java.net.URI。正确调用会生成“ file:// [host] /” .toString()
David Tonhofer


21
new URL("file:///your/file/here")

1
哪里/your/file/here是Unix / Linux上文件的绝对路径。我认为在Windows上会有所不同。
罗宾·格林

5
这不是很聪明,因为您必须自己处理URL中不允许的字符转义。在Windows(和可能的其他操作系统)上,还必须修改从本机路径到文件的路径分隔符。
jarnbjo 2011年

new URL("file:my.properties");
weberjn

尽管这是正确的,但它不可移植,因为它取决于绝对路径。
mazunki


5

有关完整的语法,请看这里:http : //en.wikipedia.org/wiki/File_URI_scheme( 对于类似Unix的系统)将如@Alex所说,file:///your/file/here而对于Windows系统则为file:///c|/path/to/file


7
不要手动做。File.toURI().toURL()是要走的路
肖恩·帕特里克·弗洛伊德

3
@SeanPatrickFloyd有时您别无选择,例如在.properties文件中时。
雪橇2014年

@ArtB我看不出有什么区别
肖恩·帕特里克·弗洛伊德

2
@SeanPatrickFloyd,这个问题/答案出现时,你搜索java file url,这在我的情况下,意味着我正在寻找一个格式file://的URL,在Java中,用在一个.properties文件或手动输入等
daveloyall

1
@SeanPatrickFloyd有时您无权访问源代码,而只能访问该属性,file://很不幸,这是必需的。依赖系统不是什么大问题,因为它是可变属性。
vikingsteve

4

您也可以使用

[AnyClass].class.getResource(filePath)

2
前提

1
如果可以在jar中找到“ filePath”,则生成的URL类似于jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt
David Tonhofer 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.