我看到两种类型的文件引用,例如:我有一个名为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());
绝对路径返回结果,local
和file
路径引发FileNotFoundException
答案 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类URL和URI支持在file://ftp.yoyodyne.com/pub/files/foobar.txt
或http://java.sun.com/j2se/1.3/
中使用前缀。
此外,Spring在其resource抽象中支持诸如file:/
或classpath:/
之类的前缀。
值得注意的是,一方面File,另一方面,不同的资源抽象(Spring,URL和URI)代表了截然不同的概念。