2 votes

Java - Étrange problème de répertoire ?

Lorsque je lance une classe avec le code suivant :

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() + ")");
        }
    }
}

Je reçois ça dans la console :

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

Le répertoire "out" est dans le même répertoire que le .jar. Il existe un répertoire "in" qui contient les répertoires "a", "b" et "c" (pour les tests).

Une idée de la raison pour laquelle cela ne fonctionne pas ?

Gracias.

5voto

phlogratos Points 3424

Vous devez remplacer dir.mkdir() con duplicate.mkdir() parce que dir est le répertoire source déjà existant.

3voto

Uri PD Points 1

dir.mkdir() ne renvoie que la vérité si le répertoire a été effectivement créé. Essayez de faire

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

0voto

crowne Points 6002

La ligne

`if(dir.mkdir())`

essaie de créer la structure de répertoire existante

si vous le changez en
if(duplicate.mkdir())

vous obtenez un autre problème où il essaie de créer un sous-répertoire sous out qui n'existe pas encore.

Alors, changez-le en
if(duplicate.mkdirs())

qui créera la structure du répertoire, ou créez le répertoire de sortie avant de lancer votre boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X