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();
}
}
}
}
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
Hmm n'a jamais pensé à ça merci! – eoinDub