2012-10-05 3 views
2

Je sais que si est-il possible d'obtenir le nom simple d'un ZipEntry ...Comment obtenir le nom simple du ZipEntry?

Quand j'invoque la getName() de l'entrée, je reçois un nom de chemin complet.

Je dois obtenir que le nom du fichier.

Ici, j'ai besoin d'obtenir le nom simple à la place du nom complet avec sa racine.

public class ZipFileSample { 

    public static void main(String[] args) { 

     try { 
      ZipFile zip = new ZipFile(new File("C:\\Users\\Levi\\Desktop\\jessica.zip")); 

      for (Enumeration e = zip.entries(); e.hasMoreElements();) { 
       ZipEntry entry = (ZipEntry) e.nextElement(); 
       //Here I need to get the simple name instead the full name with its root 
       System.out.println(entry.getName()); 
      } 

     } catch (ZipException e) { 
      e.printStackTrace(); 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 

    } 
} 

Répondre

4

Que diriez-vous

new File(entry.getName()).getName() 
+0

Merci njzk2, cela fonctionne bien, le seul problème est que je dois créer un nouveau fichier() pour obtenir le résultat souhaité, mais laisse en avant. –

+1

vous ne créez pas réellement un fichier, vous créez un objet qui représente un fichier. il n'y a pas forcément un fichier réel sous-jacent – njzk2

+0

exactement, c'est ce que je voulais dire. Je vous remercie. –

1

vous pouvez essayer avec le code ci-dessous (peut-être que vous devez prendre quelques précautions pour java.lang.StringIndexOutOfBoundsException). Aussi, vous pouvez appliquer un certain contrôle si vous connaissez l'extension

 try { 
      ZipFile zip = new ZipFile(new File("F:\\OTHERS\\classes.zip")); 
      for (Enumeration e = zip.entries(); e.hasMoreElements();) { 
       ZipEntry entry = (ZipEntry) e.nextElement(); 
       //Here I need to get the simple name instead the full name with its root 
       String name =entry.getName(); 
       //if(name.endsWith(".java")) 
//    { 
        name = name.substring(name.lastIndexOf("/")+1,name.length()); 
        System.out.println(name); 
//    } 
      } 

     } catch (ZipException e) { 
      e.printStackTrace(); 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
+0

pour ajouter, au-dessus de la logique imprimera seulement des noms de dossier, et pas des noms de dossiers. –

+0

êtes-vous sûr que le séparateur de répertoire est un /? et est-il possible qu'un nom de fichier contienne un /? – njzk2

+0

Au lieu de '/', nous pouvons utiliser File.separator. Le nom de fichier ne contient jamais '/', donc vous obtiendrez le nom de fichier complet. lastIndex («/») renvoie -1 si le nom ne contient aucune séparation, de sorte que le fonctionnement est SUBSTRING (0, longueur) –