File.isDirectory()不起作用

时间:2015-04-12 12:31:05

标签: java file

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.

有关如何解决这个问题的想法吗?

2 个答案:

答案 0 :(得分:2)

我的猜测是你在其中一个文件名中有一个零宽度空间(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(编码> ANSI中的编码),则违规行如下所示:

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

答案 1 :(得分:0)

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

参考:

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