2011-07-14 13 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と同じディレクトリにあります。 "a"、 "b"、 "c"ディレクトリ(テスト用)を含むディレクトリ "in"があります。

これはなぜ機能しないのでしょうか?

ありがとうございます!

+0

あなたがduplicate.getPath()の代わりに何を書いたら、結果は何ですか?duplicate.getAbsolutePath() –

答えて

5

をやってみてください。

+0

Doh、愚かな私。ありがとう:) – guywhoneedsahand

+0

@guywhoneedsahandあなたの質問に答える場合は、答えを受け入れる必要があります。 –

+0

私は知っています - タイムアウトを待っています。 "あなたはこの質問をx分で受け入れることができます"。 – guywhoneedsahand

3

dir.mkdir()は、実際にディレクトリが作成された場合のみtrueを返します。 dirは、既存のソースディレクトリであるため、あなたがduplicate.mkdir()dir.mkdir()を置き換える必要があり

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

あなたは
if(duplicate.mkdir())

にそれを変更した場合のライン

`if(dir.mkdir())` 

は、あなたがそれを下にサブディレクトリを作成しようとする別の問題を取得し、既存のディレクトリ構造

を作成しようとしていますまだ存在しません。

ですから、あなたのループを開始する前に、ディレクトリ構造を作成、またはアウトディレクトリが作成されます
if(duplicate.mkdirs())

に変更します。