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

Posted

技术标签:

【中文标题】将本地文件传递到 Java 中的 URL【英文标题】:Pass a local file in to URL in Java 【发布时间】:2011-08-31 04:56:55 【问题描述】:

如何使用本地文件创建一个新的URL 对象以进行单元测试?

【问题讨论】:

【参考方案1】:

使用 Java 11:

Path.of(string).toUri();

使用 Java 7:

Paths.get(string).toUri();

要转换为老式 URL 类(为什么?),请添加 .toURL()。请注意,字符串输出存在差异。现代的URI::toStringfile:///(传统的URL 语法)开头,而几乎被弃用的URL::toStringfile:/(现代的URI 语法)开头。奇怪?

【讨论】:

"...URI 以 file:/// 开头,但 URL 以 file:/ ..." Windows 和 Linux 都是这种情况吗? @ptntialunrlsd 这是个好问题。我还没有检查,但我猜是的。 没有。 URL 只是 URI 的一种特殊情况。文件 URI 以“file://”开头,然后列出主机(通常省略),然后是“/”和路径“foo/bar”(通常意味着作为绝对路径读取)。因此“file:///foo/var”。看起来像“file:/foo/bar”的 URI 不正确。另见:file URI scheme @DavidTonhofer 感谢您对 URI 的解释,但这并不能回答 ptntialunrlsd 的问题。 '...toURL().toString()' 在 Linux 上产生什么?另外,我已恢复您的编辑,因为它们使我的回答更加冗长而没有改变含义。 @AleksandrDubinsky 不过,最好将指向 Oracle javadoc 的指针留在其中.. 更容易点击进入 java.nio.file.Paths。另外,请务必明确您的意思是“URI vs URL”中的实现。 Anway java.net.URL.toString() 在 Unix 上产生同样的东西,因为它必须。它只显示一个非常错误的“/”(参见file URI scheme)。我想这是在 Java 中的原因,最好使用java.net.URI。它在调用.toString() 时正确生成“file://[host]/”。【参考方案2】:

我在 Linux 上使用 Java 进行了尝试。下列可能性是可以的:

file:///home/userId/aaaa.html
file:/home/userId/aaaa.html
file:aaaa.html  (if current directory is /home/userId)

不工作是:

file://aaaa.html

【讨论】:

【参考方案3】:

你也可以使用

[AnyClass].class.getResource(filePath)

【讨论】:

但前提是该文件存在于类路径中 如果可以在 jar 中找到“filePath”,则生成的 URL 类似于 jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt【参考方案4】:
new File(path).toURI().toURL();

【讨论】:

对于 java 7+:Paths.get("path","to","stuff").toUri().toURL()【参考方案5】:
File myFile=new File("/tmp/myfile");
URL myUrl = myFile.toURI().toURL();

【讨论】:

【参考方案6】:

在这里查看完整的语法:http://en.wikipedia.org/wiki/File_URI_scheme 对于类 unix 的系统,它将是 @Alex 所说的 file:///your/file/here,而对于 Windows 系统,它将是 file:///c|/path/to/file

【讨论】:

不要手动操作。 File.toURI().toURL()是要走的路 @SeanPatrickFloyd 有时您别无选择,例如在 .properties 文件中时。 @ArtB 我不明白这有什么不同 @SeanPatrickFloyd,当您搜索 java file url 时会出现此问题/答案,在我的情况下,这意味着我正在搜索 file:// URL 的格式,用 Java 编写,用于.properties 文件,或手动输入等。 @SeanPatrickFloyd 有时您无权访问源代码,只能访问属性,很遗憾,file:// 是必要的。依赖于系统并不是一个大问题,因为它是一个可变属性。【参考方案7】:
new File("path_to_file").toURI().toURL();

【讨论】:

【参考方案8】:
new URL("file:///your/file/here")

【讨论】:

其中/your/file/here 是 Unix/Linux 上文件的绝对路径。我认为在 Windows 上会有所不同。 这不是很聪明,因为您必须自己处理 URL 中不允许的字符的转义。在 Windows(以及可能的其他操作系统)上,您还必须将路径分隔符从文件的本机路径修改为。 new URL("file:my.properties"); 虽然这是正确的,但它是不可移植的,因为它依赖于绝对路径。 在 Windows 上,以下对我有用:file:///C:\\file.zip

以上是关于将本地文件传递到 Java 中的 URL的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 url 下载到 .Net Core 中的本地设备

WIndowsServer ---------- 将本地文件映射到服务器

在url中如果访问本地文件将使用file协议?

将远程 JSON 结果写入本地文件

Java实现文件上传到服务器本地,并通过url访问

如何使用 Java 中的 jcifs 将文件从 smb 共享复制到本地驱动器?