web-dev-qa-db-fra.com

Comment créer un fichier - y compris des dossiers - pour un chemin donné?

Je télécharge un fichier Zip à partir du Web. Il contient des dossiers et des fichiers. Les décompresser en utilisant ZipInputstream et ZipEntry. Zipentry.getName Donne le nom du fichier sous la forme htm/css/aaa.htm.

Je crée donc une nouvelle File(zipentry.getName);

Mais problème il lance une exception: File not found. J'ai compris qu'il crée des sous-dossiers htm et css.

Ma question est: comment créer un fichier incluant ses sous-répertoires, en passant au dessus du chemin?

46
Srinivas

Utilisez ceci:

File targetFile = new File("foo/bar/phleem.css");
File parent = targetFile.getParentFile();
if (!parent.exists() && !parent.mkdirs()) {
    throw new IllegalStateException("Couldn't create dir: " + parent);
}

Bien que vous puissiez simplement faire file.getParentFile().mkdirs() sans vérifier le résultat, il est considéré comme une meilleure pratique de vérifier la valeur de retour de l'opération. D'où la vérification d'un répertoire existant d'abord, puis la vérification de la création réussie (s'il n'existait pas encore).

Référence:

104
Sean Patrick Floyd

Vous pouvez utiliser la bibliothèque guava de Google pour le faire en quelques lignes avec la classe Files :

Files.createParentDirs(file);
Files.touch(file);

https://code.google.com/p/guava-libraries/

12
Andrejs

Vous devez créer des sous-répertoires si nécessaire, pendant que vous parcourez les entrées du fichier Zip.

ZipFile zipFile = new ZipFile(myZipFile);
Enumeration e = zipFile.entries();
while(e.hasMoreElements()){
    ZipEntry entry = (ZipEntry)e.nextElement();
    File destinationFilePath = new File(entry.getName());
    destinationFilePath.getParentFile().mkdirs();
    if(!entry.isDirectory()){
        //code to uncompress the file 
    }
}
2
dogbane

C'est comme ça que je le fais

static void ensureFoldersExist(File folder) {
    if (!folder.exists()) {
        if (!folder.mkdirs()) {
            ensureFoldersExist(folder.getParentFile());
        }
    }
}
1
Gubatron

Regarde le fichier que vous utilisez la méthode .mkdirs() sur un objet File: http://www.roseindia.net/Java/beginners/Java-create-directory.shtml

 isDirectoryCreated = (nouveau fichier ("../ path_for_Directory/Directory_Name")). mkdirs (); 
 if (! isDirectoryCreated) 
 {
 // Répertoire la création a échoué 
} 
1
parag.rane