我检查,甚至打印出路径和路径存在,但它无法找到该文件。我试了本地代码,它的工作原理,我不知道是什么原因(在Java中)。为什么file.exists()失败?
filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
System.out.println("File does not exist");
}
我检查,甚至打印出路径和路径存在,但它无法找到该文件。我试了本地代码,它的工作原理,我不知道是什么原因(在Java中)。为什么file.exists()失败?
filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
System.out.println("File does not exist");
}
您的代码非常好,您需要检查您的文件。确保你的文件实际上是test.html。有时文件可能会以扩展名命名,但实际上是不同类型的文件。例如您的文件实际上可能是
test.html.html
,但会显示为
的test.html
我甚至在我的文件夹目录中显示所有隐藏的文件和扩展名,所以文件名是正确的 – user1663380
如果你测试了你本地计算机与Windows,请注意文件名不区分大小写。如果您的服务器基于Linux/Unix平台,则文件名将区分大小写。
请仔细检查。
OP在上面注释中表示服务器是Win 2008。 –
我能想到的三种可能的解释你所看到的:
这可能是一个坏的捷径。 javadoc exists()
说:
测试是否存在由此抽象路径名表示的文件或目录。
如果路径名是断开的符号链接的名称,则该路径表示的文件或目录不存在。 (如果你试图用Java打开它,你会得到一个IOException。)
该应用程序没有足够的权限来查看该文件。例如,如果FolderA
上的权限是程序无法读取的权限,则exists()
将不得不返回整个路径的false
。
不知何故,您已经设法将一个时髦的字符存入文件系统中存储的文件的路径名,或者程序中的Java字符串文字。在不同的西方字母表中有一些Unicode字符,看起来像拉丁字母(a-z,A-Z) ...但不是。根据用于显示各个字符的字形,这些可能很难找到。
前两个理论可以通过检查所涉及的文件和目录进行测试。
第三个将需要检查您的源代码和目录列表使用一些工具,可以呈现各自的字符为十六进制。
如果您尝试打开从Java读取路径名(例如)记事本中,会发生什么情况。
一个有趣的家伙可能在文件名(或目录名)中使用了Cyrillic字母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));
}
或者复制你自己的文件。
你确定该文件存在吗?,你确实意识到File构造函数不会创建一个物理文件。 – PermGenError
权限设置是否正确,以便使用java执行的程序可以访问文件(如果它确实存在)? – Werzi2001
想file.exists()有些替代品,有时它不会返回正确的值http://stackoverflow.com/questions/3833127/alternative-to-file-exists-in-java – user1663380