Java - Странная проблема с каталогом? - PullRequest
2 голосов
/ 14 июля 2011

Когда я запускаю класс со следующим кодом:

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)

Каталог "out" находится в том же каталоге, что и.jar.Существует каталог "in", который содержит каталоги "a", "b" и "c" (для тестирования).

Есть идеи, почему это не работает?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 14 июля 2011

Вы должны заменить dir.mkdir() на duplicate.mkdir(), потому что dir - это уже существующий каталог с исходным кодом.

3 голосов
/ 14 июля 2011

dir.mkdir() только возвращает true, каталог был фактически создан.Попробуйте сделать

if(dir.mkdir() || dir.exists())
0 голосов
/ 14 июля 2011

Линия

`if(dir.mkdir())`

пытается создать существующую структуру каталогов

если вы измените его на
if(duplicate.mkdir())

Вы получаете другую проблему, когда он пытается создать подкаталог в out , который еще не существует.

Так что измените его на
if(duplicate.mkdirs())

, которая создаст структуру каталогов или создаст каталог out перед началом цикла.

...