我正在使用java.io.File处理外部存储上的某些PDF文件。我正在加载它们并在我的日志中注意到我得到了一些File NotFoundExceptions
。我正在寻找异常并注意到一个奇怪的标志(一个黑色正方形,其中?
位于= )UNC。
这就是我制作文件的方式。如果有所不同,我会从缓冲的阅读器中获取字符串。
File myPathFile
FileReader fr = new FileReader(myPathFile);
BufferedReader br = new BufferedReader(fr)
String o = br.readLine();
File f = new File(o)
我认为它与:
相同 File f = new File("\\test\ö\myFile.pdf"); //When the UNC looks like this it won't work. (the ö is �)
File f2 = new File("\\test\myFile.pdf"); //This works
答案 0 :(得分:2)
首先,它不是URL,而是UNC。
然后,这不是一个正确的UNC,因为你忘记了一些非常重要的部分。
\\ComputerName\SharedFolder\Resource
分组在哪里
[\\] flag to suggest it's a UNC
[ComputerName] The name of the remote computer
[\] separator character
[SharedFolder] The shared folder name
[\Resource] The path name of the remote file
最后,你没有正确地转义字符串中的特殊字符,所以你可能甚至没有离开你的机器,更不用说到达你想要的地方了。
要在Java中键入\
,您需要知道\
用于特殊字符,如null,backspace等。所以要获得单个,正常\
您必须输入\\
。这将是你的第一个例子。
在非Microsoft系统上,请记住远程路径名可能使用/
而不是\
,并且/
不是转义字符,因此不需要输入两次。
File f = new File("\\\\test\\ö\\myFile.pdf");
由于您没有名为ö
和你的第二个例子
File f2 = new File("\\\\test\\myFile.pdf");
你的第二个例子不起作用,因为它没有要打开的资源。
假设您不想离开计算机,则缺少本地文件名的一部分。在Windows上,完整路径包括“卷名称”,通常为C:
或类似的东西。
File f = new File("c:\\test\\myFile.pdf");
有时人们会省略卷名,在这种情况下,您依赖操作系统的优点来尝试为您找到该文件。一般来说,这不是一个好主意。
File f = new File("\\test\\myFile.pdf");
但即使这看起来类似于你的第二个例子,它包含一个额外的正斜杠来逃避正斜杠。虽然你的实际例子没有。