Bonjour, je suis débutant en java et je dois réaliser un programme de sauvegarde.
J'ai donc réalisé un programme qui choisis les fichiers a sauvegarder puis les ajoute dans un zip.

J'ai rencontré quelques problèmes avec ce zip mais j'ai finalement réussi à l'avoir correct.
Lors de test sur des répertoires (sous windows) de plus de 3Go, je n'ai pas forcément d'erreur mais lorsque je tente de réparer l'archive avec winrar, j'obtiens l'erreur suivante après quelques milliers de fichiers :

Erreur de lecture dans le fichier zip
Tentative de déplacement du pointeur de fichier avant le début du fichier.

Je n'ai pas réussi a trouver des liens entre cette erreur et mon code de compression. Avez vous déjà eu un problème de ce type?

Voici le code qui créé et ajoute des fichiers au zip
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
/**
 * @author : Anthony
 * 
 * _zos est le fichier Zip de la sauvegarde du jour
 ****************************/
 public class  CompressionInc
 { 
 private   ZipOutputStream       _zos;
 
 
 /**
 * creation du fichier de sortie _zos avec le nommage
 * le fichier est stocke dans sauvegarde/zip/incrementale/szDirName
 * 
 *************************************************/
 public  CompressionInc (String  szDir, long  now)
 throws  IOException
 {
 String  szDirName = szDir.replaceAll     (":\\\\", "_");
         szDirName = szDirName.replaceAll ( "\\\\", "_");
         szDirName = szDirName.replaceAll ( "/"   , "_");
 System.out.println (szDirName);
 
 Date  date = new Date ();
 date.setTime (now + 1000);
 System.out.println (date);
 
 SimpleDateFormat  dateFormat    = new SimpleDateFormat ("yyyy-MM-dd_HH.mm.ss");
 
 String            szDate        = dateFormat.format (date);
 String            szZipFileName = szDirName + szDate + ".zip";
 File              zipFile       = new File ("zip/incrementale/" + szDate + "/" + szZipFileName);
 
 zipFile.getParentFile ().mkdirs ();
 
 FileOutputStream  fos = new FileOutputStream (zipFile);
 
 _zos     = new ZipOutputStream (fos);
 
 _zos.setLevel (Deflater.DEFAULT_COMPRESSION);
 } 
 
 
 /**
 * ajoute un fichier a l'archive
 * iSize est le nombre de bytes lu pendant la compression 
 *****************************************************/
 public void  addFile (String  szPath, int  iDirLength)
 throws  FileNotFoundException,  IOException,  ZipException
 {
 int        iSize  = 0; 
 final int  BUFFER = 1024;
 byte []    buffer = new byte [BUFFER];
 try
    {
    String  szPathFile = szPath.substring (iDirLength);
 
    File  fileToCompress = new File (szPath);
 
    if (fileToCompress.isDirectory () == true)
        {
        ZipEntry  zipEntry = new ZipEntry (szPathFile + "/");
 
        _zos.putNextEntry (zipEntry);
 
        System.out.println ("COPIE DU REPERTOIRE " + szPathFile + "/");
        }
    else
        {
        File                 file      = new File (szPath);
        FileInputStream      fileInput = new FileInputStream (file);
        BufferedInputStream  buffIn    = new BufferedInputStream (fileInput);
        ZipEntry             zipEntry  = new ZipEntry (szPathFile);
 
        _zos.putNextEntry (zipEntry);
 
        while ((iSize = buffIn.read (buffer, 0, BUFFER)) != -1)
            {
            _zos.write (buffer, 0, iSize);
            }
        _zos.flush ();
        _zos.closeEntry ();
 
        buffIn.close ();
 
        System.out.println ("COPIE DE " + szPathFile);
        }
    }
 
 finally
    {
    }
 }
 
 /**
 * Fermer le zip
 ************************/
 public void  closeZip ()
 throws  IOException
 {
 _zos.finish ();
 _zos.close ();
 }
 
 }
de plus lorsque j'utilise la commande unzip pour un gros zip sous linux, je recois ce message :

warning zip.zip : 0 extra bytes at beginning or within zipfile
file #1 : bad zipfile offset (local header sig : 0)
merci de toute l'aide que vous pourrez apporter!