【问题标题】:Method File.isDirectory() not working in Java [closed]方法 File.isDirectory() 在 Java 中不起作用 [关闭]
【发布时间】:2015-04-12 12:31:04
【问题描述】:
String baseDirectory = "F:\\Studies";

File folder = new File(baseDirectory);
if (folder.isDirectory()) {
    System.out.println("Folder is  a Directory");
}

File folder2 = new File("F:\\Studies");
if (folder2.isDirectory()) {
    System.out.println("Folder2 is a Directory");
}

这里folder2.isDirectory()返回true,但folder.isDirectory()返回false。

我的输出: Folder2 is a Directory.

知道如何解决这个问题吗?

【问题讨论】:

  • 它也总是不适合我。尝试搜索字符串的结尾以找到.,如果是,那么它就是文件。
  • @Desolator 这是我所见过的最无用的评论。
  • @Desolator 它一直在和我一起工作。
  • @DineshJ 您能否将您的代码简化为产生问题的完整、独立的程序? F:\Studies 真的存在于计算机上吗?它实际上是文件还是目录?

标签: java file


【解决方案1】:

我的猜测是您在其中一个文件名中有一个零宽度空格(Unicode 字符 0x200B)。尝试重新输入它们,而不是从其他地方复制和粘贴它们。

这是一个 SSCCE,我使用 javac -encoding utf-8 FileTest.java 编译的:

import java.io.File;

public class FileTest {
    public static void main(String[] args) throws Exception {
        String baseDirectory = "C:\\Users\\Lu​ke";
        File folder = new File(baseDirectory);

        if(folder.isDirectory())
        {
            System.out.println("Folder is  a Directory");
        }

        File folder2 = new File("C:\\Users\\Luke");

        if(folder2.isDirectory())
        {
            System.out.println("Folder2 is a Directory");
        }
    }
}

当我运行它时,我得到的唯一输出是Folder2 is a Directory

这样做的原因是我在baseDirectory 的值中插入了一个零宽度的空格。因为它是一个零宽度的空间,所以你看不到它。但是,如果我在 Notepad++ 中打开类并将编码更改为 ANSI(Encoding > Encode in ANSI),则违规行如下所示:

        String baseDirectory = "C:\\Users\\Lu​ke";

【讨论】:

    【解决方案2】:

    我能想到的唯一解释是你有一个同形字问题;即这两个字符串文字 看起来 相同,但实际上并不相同。

    参考:

    当然……也有可能是你编译代码的方式有问题,而你实际上并没有运行与你正在查看的源代码相对应的代码。

    【讨论】:

    • F:\\Studies - 我没有找到任何可能的方法来解决这个字符串的同形字问题。我没有输入两次。我只是复制粘贴。
    • 在这种情况下,问题一定是您运行的代码与您的源代码不匹配。实际上,您还没有向我们展示真正的源代码。您向我们展示的代码不是一个完整的类。
    • 不...在这种情况下,我不会从第二个 if 语句中获得输出 这对您有用吗?你能粘贴代码和你的输出吗..
    • 您发布的代码不可编译。请看sscce.org
    • @DineshJ - 1) 你的论点有缺陷。如果您正在执行的代码与您正在查看的源代码不匹配,那么您不知道它在做什么。 2) 不。我目前没有运行 Windoze。此外,正如 Dunni 指出的那样,您的代码不可编译。如果您需要更多帮助,请发布 SSCCE ...
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    相关资源
    最近更新 更多