我检查并甚至打印出路径,路径存在,但它找不到文件。我在本地尝试了代码,它工作了,我不确定原因是什么(在Java中)。
filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
System.out.println("File does not exist");
}
我可以想到三种可能的解释:
-
这可能是一个坏的捷径。
exists()
的javadoc表示:测试这个抽象路径名表示的文件或目录是否存在。
如果路径名是一个断开的符号链接的名称,则该路径表示的文件或目录不存在。(如果你试图在Java中打开它,你会得到一个IOException.)
-
应用程序没有足够的权限查看该文件。例如,如果
FolderA
的权限是这样的,程序不能读取它,exists()
将不得不返回false
的整个路径。 -
不知怎么地,您已经设法将一个时髦的字符放入存储在文件系统中的文件路径名或程序中的Java字符串文字中。在不同的西方字母中,有一些Unicode字符看起来像拉丁字母(a-z, a-z)…但不是。根据用于显示各自字符的字形,这些字符可能很难被发现。
前两种理论可以通过检查所涉及的文件和目录来检验。
第三种方法需要使用一些工具检查源代码和目录列表,这些工具可以将相应的字符呈现为十六进制。
如果您尝试打开路径名(用于读取),并在(例如)记事本中,
您的代码非常好,您需要检查您的文件。确保您的文件实际上是test.html。有时文件可能以扩展名命名,但实际上是不同类型的文件。例如,你的文件实际上可能是
test.html.html
但是会显示为
test.html
如果您在本地机器上使用Windows进行测试,请注意文件名不区分大小写。如果您的服务器基于Linux/Unix平台,文件名将区分大小写。
一个有趣的家伙可能在文件名(或目录名)中使用了一个西里尔字母e
(?
)。列出Java中的文件:
while (file.getPath().length() > 3 && !file.exists()) {
System.out.println("No such file: " + file.getPath());
file = file.getParentFile();
if (file == null) {
break;
}
}
if (file != null) {
String[] children = file.list();
System.out.println("Siblings: " + Arrays.toString(children));
}
或者把你自己的文件复制上去