2014-06-05 4 views
-1

J'ai développé un programme dans lequel je veux enregistrer différents fichiers dans un fichier zip en tant que sauvegarde, puis les charger quand on clique sur un bouton de restauration. J'ai le code de fichier de sauvegarde ci-dessous mais comment chargerais-je ce fichier avec JFileChooser? Je n'ai pas besoin de le lire dans le programme juste le décompresser littéralement dans le dossier où se trouve mon application. Comment ferais-je cela? Mon créer un code postal est ci-dessous:Charger et lire un fichier zip avec JFileChooser?

public void createZip(){ 

    byte[] buffer = new byte[1024]; 
    String[] srcFiles = {"Payments.dat", "PaymentsPosted.dat", "Receipts.dat", "ReceiptsPosted.dat", "AccountDetails.dat", "AssetsLiabilities.dat", "UnitDetails.dat"}; 
    String zipFile = "Backups.zip"; 

    try{ 

     FileOutputStream fos = new FileOutputStream(zipFile); 
     ZipOutputStream zos = new ZipOutputStream(fos); 

     for (int i=0; i < srcFiles.length; i++) { 
      File srcFile = new File(srcFiles[i]); 
      FileInputStream fis = new FileInputStream(srcFile); 

      // begin writing a new ZIP entry, positions the stream to the start of the entry data 
      zos.putNextEntry(new ZipEntry(srcFile.getName())); 

      int length; 
      while ((length = fis.read(buffer)) > 0) { 
       zos.write(buffer, 0, length); 
      } 

      zos.closeEntry(); 
      // close the InputStream 
      fis.close(); 
     } 

     // close the ZipOutputStream 
     zos.close(); 

     }catch(IOException ex){ 
      ex.printStackTrace(); 
     } 
     JOptionPane.showMessageDialog(null,"File Saved! See Backups.zip in your program folder"); 
    } 
} 

J'apprécierions également si quelqu'un pouvait me dire comment envelopper aussi la méthode ci-dessus dans un JFileChooser pour sauver?

EDIT: Merci à l'utilisateur 184994. Ceci est mon code d'entrée de fichier fini:

public class ZipInput { 

public void loadZip() { 

    // Create a filter so that we only see .zip files 
    FileFilter filter = new FileNameExtensionFilter(null, "zip"); 


    // Create and show the file filter 
    JFileChooser fc = new JFileChooser(); 
    fc.setFileFilter(filter); 
    fc.removeChoosableFileFilter(fc.getAcceptAllFileFilter()); 
    int response = fc.showOpenDialog(null); 

    // Check the user pressed OK, and not Cancel. 
    if (response == JFileChooser.APPROVE_OPTION) { 
     File backUp = fc.getSelectedFile(); 

     byte[] buffer = new byte[1024]; 

     try { 

      //get the zip file content 
      ZipInputStream zis = new ZipInputStream(new FileInputStream(backUp)); 
      //get the zipped file list entry 
      ZipEntry ze = zis.getNextEntry(); 

      while (ze != null) { 

       String fileName = ze.getName(); 
       File newFile = new File(fileName); 

       System.out.println("file unzip : " + newFile.getAbsoluteFile()); 

       //create all non exists folders 
       //else you will hit FileNotFoundException for compressed folder 
       //new File(newFile.getParent()).mkdirs(); 
       FileOutputStream fos = new FileOutputStream(newFile); 

       int len; 
       while ((len = zis.read(buffer)) > 0) { 
        fos.write(buffer, 0, len); 
       } 

       fos.close(); 
       ze = zis.getNextEntry(); 
      } 

      zis.closeEntry(); 
      zis.close(); 

      System.out.println("Done"); 

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

} 

}

+0

Q: Pourquoi ne pas simplement transformer "Backups.zip" en un paramètre de méthode, puis appeler createZip (avec votre nouveau paramètre) à partir de votre gestionnaire JFileChooser? – FoggyDay

+0

Hmm n'a jamais pensé à ça merci! – eoinDub

Répondre

1

Pour créer le JFileChooser, le code ressemblerait à ceci:

public void showOpenDialog() { 

    // Create a filter so that we only see .zip files 
    FileFilter filter = new FileNameExtensionFilter(null, "zip"); 

    // Create and show the file filter 
    JFileChooser fc = new JFileChooser(); 
    fc.setFileFilter(filter); 
    int response = fc.showOpenDialog(null); 

    // Check the user pressed OK, and not Cancel. 
    if (response == JFileChooser.APPROVE_OPTION) { 
     File yourZip = fc.getSelectedFile(); 
     // Do whatever you want with the file 
     // ... 
    }   
} 

En ce qui concerne la décompression des fichiers compressés, vous pouvez trouver plus d'informations here.

+0

Merci! Avec votre code et celui de votre lien, j'ai pu le bricoler et le faire fonctionner. Maintenant, j'ai un jFileChooser qui va sélectionner uniquement les zips et ouvrir chaque zip directement dans le dossier du programme où ils devraient être :) – eoinDub

+0

Vous avez juste à vous débarrasser de la. avant le zip – eoinDub

+0

Merci de l'avoir signalé, j'ai mis à jour le code :) – user184994

Questions connexes