Bonjour,

Mon problème est tout simple à expliquer: Mon programme compresse ou stocke des fichiers ou dossiers dans un fichier zip. Mais quand un le poids total des fichiers à compresser est supérieur à 2Go, l'archive ne se termine pas et donc elle est inutile. (Elle pèse cependant le poids qu'elle devrais une fois terminée)
Je n'obtiens cependant pas d'erreur, même du type OutOfMemory (ce que je pensais être la cause mais en fait c'est surement la limite de la JVM)

J'utilise Apache IO pour lister les fichiers.
Voici mon code: (j'ai retiré les parties inutiles à la résolution du problème)

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
 
public class Compressor extends JFrame {
 
	public static String choosenRate = "Nul";
	public static String type;
	public static String getName = "Dossier ou fichier compressé";
	public static String zipPath;
	public static String srcPath;
	public static boolean srcModified = false;
	public static boolean zipModified = false;
 
 
	public void compressFile(String name , String zipFile , String srcDir , String rateEntry) {
 
		File zip = new File(zipFile + "/" + name + ".zip");
 
		try {
			try {
				zip.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
 
			byte[] buffer = new byte[8192];
 
   			File dir = new File(srcDir);
 
			FileOutputStream fos = new FileOutputStream(zip);
 
			ZipOutputStream zos = new ZipOutputStream(fos);
			switch (rateEntry) {
			case "Nul": 
				zos.setLevel(ZipOutputStream.STORED);
				break;
			case "Faible":
				zos.setLevel(3);
				break;
			case "Moyen":
				zos.setLevel(6);
				break;
			case "Elevé":
				zos.setLevel(9);
				break;
			}
 
			try{
 
				FileInputStream fis = new FileInputStream(srcDir);
				int length;    						
 
    			System.out.println(srcDir);
 
   				zos.putNextEntry(new ZipEntry(dir.getName()));
 
				while ((length = fis.read(buffer)) > 0) {
					zos.write(buffer, 0, length);
				}
 
					zos.closeEntry();
 
					fis.close();
 
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
 
 
		zos.close();
 
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (IllegalArgumentException iae) {    			
			iae.printStackTrace();
		}
	}
 
 
	public void zipProcess(String name , String zipFile , String srcDir , String rateEntry )  {
 
			File zip = new File(zipFile + "/" + name + ".zip");
 
    		try {
 
				try {
					zip.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
 
    			byte[] buffer = new byte[1024];
 
       			File dir = new File(srcDir);
 
    			List<File> filesList = (List<File>) FileUtils.listFilesAndDirs(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    			File[] files = filesList.toArray(new File[filesList.size()]);
 
    			FileOutputStream fos = new FileOutputStream(zip);
 
    			ZipOutputStream zos = new ZipOutputStream(fos);
    			switch (rateEntry) {
    			case "Nul": 
    				zos.setLevel(ZipOutputStream.STORED);
    				break;
    			case "Faible":
    				zos.setLevel(3);
    				break;
    			case "Moyen":
    				zos.setLevel(6);
    				break;
    			case "Elevé":
    				zos.setLevel(9);
    				break;
    			}
 
 
    			for (int i = 0; i < files.length; i++) {
				try{
 
					if (files[i].isDirectory()) {
 
					} else {
 
					FileInputStream fis = new FileInputStream(files[i]);
					int length;    						
 
 
	    			String filePath = files[i].getAbsolutePath().substring(srcDir.length() + 1);
	    			System.out.println(filePath);
 
	   				zos.putNextEntry(new ZipEntry(filePath));
 
					while ((length = fis.read(buffer)) > 0) {
						zos.write(buffer, 0, length);
					}
 
						zos.closeEntry();
 
						fis.close();
				}
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
    			}
 
			zos.close();
 
    		} catch (IOException ioe) {
    			ioe.printStackTrace();
    		} catch (IllegalArgumentException iae) {    			
    			iae.printStackTrace();
    		}
	}
   ...
Excusez-moi pour l'indent un peu moyen, je passerais un peu de temps pour régler ça.