我正在与 java.io.File 合作处理外部存储上的一些 PDF 文件。我正在加载它们,并注意到在我的日志中我收到了一些File NotFoundExceptions
。我在查看异常情况时注意到一个奇怪的标志(= � 中带有 ?
的黑色方 block )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
最佳答案
首先,它不是 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、退格键等。因此要获得单个正常的 \
,您必须输入 \\
。这将是你的第一个例子。
在非 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");
但是,尽管这看起来与第二个示例类似,但它包含一个额外的正斜杠来转义正斜杠。虽然您的实际示例没有。
关于Java - 在 UNC 中未找到带有 ö 或 ü 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354208/