2011-02-27 4 views
0

ici j'essaie de compresser seulement le fichier .txt dans un dossier en utilisant java.Comment faire pour ne compresser que le fichier .txt dans un dossier en utilisant java?

Mon code ici a été trouvé avec google et fonctionne parfaitement, mais seulement pour un fichier .txt spécifié.

Merci.

import java.util.*; 
import java.util.zip.*; 
import java.io.*; 


public class ZipFile 
    { 
public static void main(String[] args) { 

    ZipOutputStream out = null; 
    InputStream in = null; 
    try { 
     File inputFile1 = new File("c:\\Target\\target.txt");// here i want to say only the directroy where .txt files are stored 
     File outputFile = new File("c:\\Target\\Archive_target.zip");//here i want to put zipped file in a different directory 

     OutputStream rawOut = new BufferedOutputStream(new FileOutputStream(outputFile)); 
     out = new ZipOutputStream(rawOut); 

     InputStream rawIn = new FileInputStream(inputFile1); 
     in = new BufferedInputStream(rawIn); 


     ZipEntry entry = new ZipEntry("c:\\Target\\target.txt"); 
     out.putNextEntry(entry); 
     byte[] buf = new byte[2048]; 
     int len; 
     while ((len = in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
    } 
    catch(IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if(in != null) { 
       in.close(); 
      } 
      if(out != null) { 
       out.close(); 
      } 
     } 
     catch(IOException ignored) 
       { } 
    } 
    } 
} 

Répondre

1

Vous devez utiliser File.list (...) pour obtenir une liste de tous les fichiers texte dans le dossier. Ensuite, vous créez une boucle pour écrire chaque fichier dans le fichier zip.

0

Vous pouvez obtenir une liste de tous les fichiers texte dans votre répertoire en utilisant la méthode suivante de la classe du fichier: Chaîne liste [] (filtre FilenameFilter) Créer un objet fichier qui pointe vers votre répertoire (je sais que cela semble illogique, mais c'est ainsi - vous pouvez tester si c'est un répertoire utilisant isDirectory()) et ensuite utiliser FilenameFilter pour dire, par exemple, accepter ce fichier si son nom contient ".txt"

+0

Ok lorsque je tente votre astuce, j'ai un message comme: – user618111

+0

java.io.FileNotFoundException: c: \ cible (accès refusé) à java. io.FileInputStream.o pen (méthode native) à java.io.FileInputStream. (FileInputStream.java:106) à ZipFile.main (ZipFile.java:37) – user618111

+0

@ user618111: s'il vous plaît montrer ce que vous avez fait, et le message d'erreur, dans une édition à la question. De cette façon, il est plus facile de vous aider. (Il semble que le répertoire ne soit pas lisible ou que vous essayez de lire un répertoire en tant que fichier). –

0

Créer un FilenameFilter qui accepte uniquement le fichier * .txt, puis utilisez simplement

list = File.list (yourNameFilter);

puis ajoutez simplement tous les fichiers dans la liste dans le fichier zip

1

Je viens d'ajouter ces lignes juste après "Fichier outputFile = new File (" c: \ cible \ Archive_target.zip "); . de mon code précédent

Code

ajouté:

File Dir = new File("c:/Target"); 
      FilenameFilter filter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
     return !name.startsWith(".txt"); 
     } 
    }; 
    String[] children = Dir.list(filter); 
Questions connexes