2011-07-14 24 views
2

當我運行下面的代碼類:Java - 奇怪的目錄問題?

public static void main(String[] args) 
{ 
    createDuplicateStructure("in", "out"); 
} 

public static void createDuplicateStructure(String path_start, String path_result) 
{ 
    File start = new File(path_start); 
    File result = new File(path_result); 
    duplicateDirectoryStructure(start, result); 
} 

public static void duplicateDirectoryStructure(File start_dir, File result_dir) 
{ 
    //FileFilter used by listFiles(filter) - to make sure they are dirs 
    FileFilter dirs_only = new FileFilter() 
      { 
       public boolean accept(File file){ return file.isDirectory();} 
      }; 
    File[] dir_contents = start_dir.listFiles(dirs_only); 
    for(File dir : dir_contents) 
    { 
     File duplicate = new File(result_dir.getPath(), dir.getName()); 
     if(dir.mkdir()) 
     { 
      duplicateDirectoryStructure(dir, duplicate); 
     } 
     else 
     { 
      System.out.println("ERROR: Unable to create dir! (" + duplicate.getPath() + ")"); 
     } 
    } 
} 

我得到這個在控制檯:

Error: Unable to create dir! (out/a) 
Error: Unable to create dir! (out/a) 
Error: Unable to create dir! (out/a) 

目錄「出」是在同一目錄下的.jar。 有一個目錄「in」,其中包含「a」,「b」和「c」目錄(用於測試)。

任何想法爲什麼這不起作用?

謝謝!

+0

如果你代替duplicate.getPath()打印duplicate.getAbsolutePath() –

回答

5

你應該duplicate.mkdir()取代dir.mkdir()因爲dir是已經存在的源目錄。

+0

Doh,結果是愚蠢的結果是什麼結果。謝謝:) – guywhoneedsahand

+0

@guywhoneedsahand你需要接受答案,如果它回答你的問題。 –

+0

我知道 - 我在等待暫停。 「你可以在幾分鐘內接受這個問題」。 – guywhoneedsahand

3

dir.mkdir()只返回true實際創建的目錄。嘗試做

if(dir.mkdir() || dir.exists()) 
0

`if(dir.mkdir())` 

試圖創建的現有目錄結構

,如果你將其更改爲
if(duplicate.mkdir())

你得到它試圖下創建子目錄另一個問題out哪些還不存在。

所以將其更改爲
if(duplicate.mkdirs())

這將創建目錄結構,或創建了目錄,你開始你的循環之前。