读取文件时file://前缀是什么意思

时间:2019-03-13 13:33:28

标签: java

我看到两种类型的文件引用,例如:我有一个名为a.txt的文件,位于:/tmp/a.txt

两种引用类型要么直接指向它:“ / tmp / a.txt”,要么在文件前添加“ hdfs,local,file”前缀。我想知道使用此前缀的含义是什么。 hdfs的情况微不足道,但是使用其他情况意味着什么?例如:

    String file = "/tmp/a.txt";
    FileInputStream fileInputStream = new FileInputStream(file);
    System.out.println(fileInputStream.available());

    file = "local://tmp/a.txt";
    fileInputStream = new FileInputStream(file);
    System.out.println(fileInputStream.available());

    file = "file://tmp/a.txt";
    fileInputStream = new FileInputStream(file);
    System.out.println(fileInputStream.available());

绝对路径返回结果,localfile路径引发FileNotFoundException

3 个答案:

答案 0 :(得分:3)

file://是引用本地网络上文件的协议。与http://通过http请求引用资源不同。

查看更多File URI Scheme
更多File URI Slashes issue

您可以使用file前缀,但需要将其转换为合法路径:

String path = "file:///tmp/a.txt";
URI uri = new URI(path);
FileInputStream stream = new FileInputStream(new File(uri));

答案 1 :(得分:1)

mentioned一样,前缀file://是URI方案的一部分,通常在Web浏览器中使用。它所做的是表明该对象应被视为文件。 file可以是本地文件或远程文件。并非每个File处理api都能识别这些前缀。

答案 2 :(得分:0)

文件constructor不支持pathname参数的前缀。这就是使用前缀pathname会导致FileNotFoundException的原因。

JDK类URLURI支持在file://ftp.yoyodyne.com/pub/files/foobar.txthttp://java.sun.com/j2se/1.3/中使用前缀。

此外,Spring在其resource抽象中支持诸如file:/classpath:/之类的前缀。

值得注意的是,一方面File,另一方面,不同的资源抽象(Spring,URL和URI)代表了截然不同的概念。