Bonjour,

Je suis en train de créer un application qui gère les fichiers .zip
Au début j'avais employé un algorithme trouvé sur le web assez long qui s'occupait de la compression et de la décompression.

Mais je me suis dis, pourquoi ne pas utiliser 7Zip qui peut se lancer par ligne de commande. Ca réduira la longueur du code et je pourrais utiliser la puissance du logiciel pour plus de fiabilité.

Je souhaite compresser un fichier.

Voici le simple code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
private static String sevenZip = "\"C:/Program Files/7-Zip/7z.exe\"";
 
public static void compress(final File file, final File target) 
{
String cmd = "cmd /c " + sevenZip + " a -tzip " + target + " " + file;
 
System.out.println(cmd);
try {
		 Runtime.getRuntime().exec(cmd);
		}catch(Exception e) {
		System.out.println("erreur d'execution " + cmd + e.toString());
	} 
}

Le problème :


J'utilise des chemins absolus.
Lorsque c'est un chemin simple et que la commande est du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"cmd /c "C:/Program Files/7-Zip/7z.exe" a -tzip C:\Users\MyDocuments\archive.zip C:\Users\MyDocuments\dossierAZipper"
ça fonctionne.

Cependant reste un problème au niveau des espaces. Si la commande générer est du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"cmd /c "C:/Program Files/7-Zip/7z.exe" a -tzip C:\Users\MyDocuments\mon archive.zip C:\Users\MyDocuments\dossierAZipper"
ça me créera un dossier mon.zip donc ce n'est pas ce que je souhaite.

Si je rajoute des doubles cotes de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
String cmd = "cmd /c " + sevenZip + " a -tzip \"" + target + "\" \"" + file + "\"";
Ça ne fonctionne pas. Aucun zippage n'est effectué ! Il ne se passe rien.
Ce qui est étrange c'est que dans le DOS, lorsque j'exécute une commande du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"C:/Program Files/7-Zip/7z.exe" a -tzip "C:/Users/MyDocuments/mon archive.zip" "C:/Users/MyDocuments/dossierAZipper"
Ça fonctionne.

Donc finalement je ne comprends pas pourquoi ça ne fonctionne pas lorsque je rajoute les doubles cotes ?
A noter que j'ai aussi remplacé '\' par '/', les résultats sont les même partout.

Une idée pour me permettre d'effectuer mes compressions ?