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 ZipInputstream utilisant ZipInputstream et ZipEntry . Zipentry.getName donne le nom du fichier sous la forme htm/css/aaa.htm .

Je crée donc un nouveau File(zipentry.getName);

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

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

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); } 

Alors que vous pouvez simplement faire file.getParentFile().mkdirs() sans vérifier le résultat, il est file.getParentFile().mkdirs() 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 (si elle n’existait pas encore).

Référence:

  • File.getParentFile ()
  • Le fichier existe()
  • File.mkdir ()
  • File.mkdirs ()

Vous pouvez utiliser la bibliothèque de goyave 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/

Vous devez créer des sous-répertoires si nécessaire en parcourant les entrées du fichier zip.

 ZipFile zipFile = new ZipFile(myZipFile); Enumeration e = zipFile.ensortinges(); 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 } } 

Le fichier que vous utilisez utilise la méthode .mkdirs() sur un object File : http://www.roseindia.net/java/beginners/java-create-directory.shtml

         isDirectoryCreated = (nouveau fichier ("../ path_for_Directory / Directory_Name")). mkdirs ();
         si (! isDirectoryCreated) 
         {
             // La création de répertoire a échoué
         }

C’est comme ça que je le fais

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