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.
有关如何解决这个问题的想法吗?
答案 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\\Luke";
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)
我能想到的唯一解释是你有一个同性恋问题;即那两个字符串文字看起来相同,但实际上并不相同。
参考:
当然......您编译代码的方式也可能有问题,而且实际上并没有运行与您正在查看的源代码相对应的代码。