2015-04-12 192 views
0
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。File.isDirectory()无法正常工作

我的输出: Folder2 is a Directory.

关于如何解决此问题的任何想法?

+0

它总是不适用于我。尝试搜索字符串的结尾以找到'.',如果是,则是文件。 – 2015-04-12 12:33:39

+6

@Desolator就像我所见过的那样毫无用处。 –

+0

@Desolator它总是和我一起工作。 – Maroun

回答

0

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

参考:

当然......这也有可能是你在你的编译代码的方式有问题,你实际上并没有奔跑代码对应于您正在查看的源代码。

+0

F:\\研究 - 我没有找到任何可能的方式来与这个字符串有一个homoglyph问题..我没有输入两次..我只是做了一个复制粘贴。 –

+0

在这种情况下,问题一定是您运行的代码与源代码不匹配。其实,你没有向我们展示真正的源代码。您向我们显示的代码不是完整的课程。 –

+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编码> Encode),那么违规行如下所示:

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