2015-04-12 190 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";