Java-找不到带有ö;或ü;在北卡罗来纳州
我正在与处理一些外部存储上的PDF文件。我正在加载它们,并注意到在我的日志中我得到了一些Java-找不到带有ö;或ü;在北卡罗来纳州,java,file-io,Java,File Io,我正在与处理一些外部存储上的PDF文件。我正在加载它们,并注意到在我的日志中我得到了一些文件NotFoundExceptions。我在查看异常情况时,注意到一个奇怪的标志(一个内有?的黑色正方形=�) 这个 这就是我制作文件的方式。如果有区别,我会从缓冲读取器中获取字符串 File myPathFile FileReader fr = new FileReader(myPathFile); BufferedReader br = new BufferedReader(fr
文件NotFoundExceptions
。我在查看异常情况时,注意到一个奇怪的标志(一个内有?
的黑色正方形=�) 这个
这就是我制作文件的方式。如果有区别,我会从缓冲读取器中获取字符串
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、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");
但是,尽管这看起来与第二个示例类似,但它包含一个额外的正斜杠来转义正斜杠。而您的实际示例没有。您确定这是您的代码吗?它甚至不应该编译…
\m
不是有效的转义。请看,这不是URL,这是UNC。其他一些组合可能会起作用,但只是因为您的操作系统正在尝试“帮助您”。它们不是有效名称,但Microsoft Windows有一个历史记录,其中包括有时允许您执行无效操作,因为允许无效操作被认为是Microsoft历史记录中可用性的关键点。它对100000个其他文件运行良好,所以我不知道我必须更改它。我认为文件共享来自unix服务器。unc的eem要这样混合:\\test\myFolder/myfile.pdfI更新了答案以更好地涵盖多平台问题。感谢您的提示。