代码之家  ›  专栏  ›  技术社区  ›  Eugene Kartoyev

如何在Java、Windows中获得适当的URI

  •  0
  • Eugene Kartoyev  · 技术社区  · 6 年前

    Wikipedia ,上面写着:

    窗户

    以下是一些示例,这些示例可能被Windows系统上的某些应用程序接受,并引用相同的本地文件c:\windows\clock.avi

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

    以下是Windows Shell API所理解的URI:[2]

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

    假设,我需要转换文件名类型: C:\WINDOWS\clock.avi 到uri,在javafx WebView中用作标记、css、链接等的href。

    根据链接(运行PDF、Internet、音乐等),该应用程序截获点击链接、分析并执行操作。

    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
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Slaw    6 年前

    打电话 toUri() 在一 Path 生成所需的URI。但是,我在文档中没有看到任何声明这是有保证的行为的内容;或者,如果它在文档中,我只是不认识它。因此,如果此行为可能发生更改,请注意,我只使用 JDK 10.0.1型 .

    在我看来,如果你可以转换你的代码使用的文件API引入的NIO2(Java 7),而不是 java.io 那是理想的。如果出于任何原因不能或不想,那么可以转换 File 变成一个 路径 使用 File.toPath() (反之亦然 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/