2

我正在使用java.io.File来处理外部存储上的一些 PDF 文件。我正在加载它们,并在我的日志中注意到我得到了一些File NotFoundExceptions. 我正在查看 Exception 并注意到一个奇怪的标志(一个黑色正方形,?里面有 = �)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
4

1 回答 1

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、退格等。因此,要获得单个正常的字符,\您必须键入\\. 这将成为你的第一个例子。

在非 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");

但即使这看起来与您的第二个示例相似,它也包含一个额外的正斜杠来转义正斜杠。虽然您的实际示例没有。

于 2012-09-10T15:13:48.600 回答