gpt4 book ai didi

java - 如何在 Java、Windows 中获得正确的 URI

转载 作者:行者123 更新时间:2023-12-02 11:00:42 25 4
gpt4 key购买 nike

Wikipedia ,它说:

Windows

Here are some examples which may be accepted by some applications on Windows systems, referring to the same, local file c:\WINDOWS\clock.avi

file://localhost/c:/WINDOWS/clock.avi
file:///c:/WINDOWS/clock.avi

Here is the URI as understood by the Windows Shell API:[2]

file:///c:/WINDOWS/clock.avi
<小时/>

假设,我需要将文件名类型:C:\WINDOWS\clock.avi 转换为 URI,以便在 JavaFX WebView 中用作标签、css、链接等的 href。

该应用程序拦截链接点击,分析并执行操作,具体取决于链接(运行 pdf、互联网、音乐等)

但是,我无法从文件名中生成要在这些 Web View 页面中使用的正确 URI。

这些是 Java 提供的结果:

代码

private static void print(String s) {
System.out.println(s);
}
public static void main(String[] args) throws Exception {
String fileName = "c:\\WINDOWS\\clock.avi";
print("0 - " + new File(fileName).toString());
print("1 - " + new File(fileName).toURI().toString());
print("2 - " + new File(fileName).toURI().toURL().toString());
print("3 - " + new URL(new File(fileName).toURI().toString()).toString());
}

结果:

 0 - c:\WINDOWS\clock.avi
1 - file:/c:/WINDOWS/clock.avi
2 - file:/c:/WINDOWS/clock.avi
3 - file:/c:/WINDOWS/clock.avi

所以,No 1、2 和 3 都是相同的,而且没有一个是正确的 - 正如我从 URI 规则中推断的那样。这是Java错误吗?

有没有正确的方法可以从文件路径c:\WINDOWS\clock.avi准确获取file:///c:/WINDOWS/clock.avi uri code> 而不是生成的 file:/c:/WINDOWS/clock.avi,它在多个地方被报告为错误?

StackOverflow 最受欢迎的答案是使用 No. 1 或 No. 2,但上面显示结果不是正确的 URI。

最佳答案

调用toUri()Path上生成您想要的 URI。但是,我在文档中没有看到任何内容表明这是有保证的行为;或者如果它在文档中,我只是不认识它。因此,如果此行为可能发生变化,请注意,我仅使用 JDK 10.0.1 进行了尝试。

在我看来,如果您可以将代码切换为使用 NIO2 (Java 7) 引入的文件 API,而不是 java.io 那将是理想的选择。如果您出于某种原因不能或不想这样做,那么您可以使用 File.toPath()File 转换为 Path (反之亦然,使用 Path.toFile() )。

使用此代码:

File file = new File("C:\\Users\\Username\\Desktop");
System.out.printf("File.toURI() = %s%nFile.toPath().toUri() = %s%n",
file.toURI(), file.toPath().toUri());

给了我这个输出:

File.toURI() = file:/C:/Users/Username/Desktop/
File.toPath().toUri() = file:///C:/Users/Username/Desktop/

关于java - 如何在 Java、Windows 中获得正确的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com