0

我检查并打印了路径并且路径存在,但找不到文件。我在本地尝试了代码并且它有效,但我不确定原因是什么(在Java中)。

filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
    System.out.println("File does not exist");
}
4

4 回答 4

2

对于您所看到的情况,我可以想到三种可能的解释:

  1. 这可能是一条破损的捷径。javadocexists()说:

    测试此抽象路径名表示的文件或目录是否存在。

    如果路径名是断开的符号链接的名称,则路径表示的文件或目录不存在。(如果你试图用 Java 打开它,你会得到一个 IOException。)

  2. 应用程序没有足够的权限来查看该文件。例如,如果权限FolderA使程序无法读取它,exists()则必须返回false整个路径。

  3. 不知何故,您设法将一个时髦的字符放入存储在文件系统中的文件的路径名或程序中的 Java 字符串文字中。在不同的西方字母表中有某些 Unicode 字符看起来像拉丁字母(az,AZ)......但不是。这些可能很难发现,具体取决于用于显示各个字符的字形。


前两个理论可以通过检查所涉及的文件和目录来测试。

第三个将需要使用可以将相应字符呈现为十六进制的某些工具检查您的源代码和目录列表。

如果您尝试从 Java 和(例如)记事本中打开路径名(用于读取),会发生什么也值得一看。

于 2013-05-22T14:17:05.907 回答
0

有趣的人可能在文件名(或目录名)中使用了西里尔字母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));
}

或者在那里复制你自己的文件。

于 2013-05-22T14:17:19.040 回答
0

如果您在本地计算机上使用 Windows 对其进行了测试,请注意文件名不区分大小写。如果您的服务器基于 Linux/Unix 平台,则文件名将区分大小写。

请仔细检查。

于 2013-05-22T13:51:24.017 回答
0

您的代码非常好,您需要检查您的文件。确保您的文件实际上是 test.html。有时文件可能以扩展名命名,但实际上是不同类型的文件。例如,您的文件实际上可能是

test.html.html

但会显示为

测试.html

于 2013-05-22T13:46:53.297 回答