2017-08-08 1 views
0

J'ai le contenu d'un fichier zip que j'ai reçu d'un API de données de formulaire en plusieurs parties stocké en tant que chaîne. Je veux simplement enregistrer ces données maintenant sous forme de fichier zip; cependant, lorsque j'essaie d'enregistrer dans un fichier comme ci-dessous, lorsque j'essaie d'ouvrir le fichier, je reçois un message indiquantJe tente d'enregistrer une représentation sous forme de chaîne du contenu du fichier zip en tant que fichier en Java

"Windows ne peut pas ouvrir le dossier." Le dossier compressé (zippé) "C: \ payload.zip" est invalide." Je passe simplement la chaîne que je reçois à la petite méthode createFile de test illustrée ci-dessus.

Je pensais que je coller le contenu de la chaîne réels ci-dessous, mais lorsque je tente de le faire il le convertit à cette (sans les guillemets): « PK »

Toute aide à ce que je fais mal ?

+1

Un fichier zip est un format binaire non seulement de texte brut. Utilisez 'ZipOutputStream' pour écrire vos données – Reimeus

+0

Au moment où vous commencez à traiter les données binaires comme un' String', vous êtes condamné. Dans votre cas, cela se produit lors de la réception des données de formulaire. – Kayaman

Répondre

0

Pour enregistrer la représentation de texte de votre zip sous forme de fichier zip à nouveau:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
               new FileOutputStream("c:\\dest.zip"), 
               "Cp1252")); 
writer.write(data); 
writer.close(); 

Ou vous pouvez essayer:

FileOutputStream fos = new FileOutputStream("C:\\dest.zip"); 
fos.write(data.getBytes()); 
fos.close(); 
+0

Salut Vanna, oui vous avez raison, j'ai déjà le contenu du fichier zip et j'ai simplement besoin de les écrire dans un fichier zip sur mon système de fichiers local. J'ai essayé votre exemple ci-dessus avec le codage Cp1252; cependant, j'ai reçu le même message d'erreur lors de la tentative d'ouverture du fichier "Windows ne peut pas ouvrir le dossier." Le dossier compressé (compressé) "C \ dest.zip" n'est pas valide. " Des pensées? – MikeAnthony

+0

Merci, malheureusement, j'ai toujours la même erreur en essayant d'extraire le fichier zip résultant. Ci-dessous sont les contenus réels du fichier zip que j'ai créé (entre guillemets) Juste au cas où cela pourrait aider. "PK ÁIKšŽÌ * • *> 511257719_511257718_837P5010X12BATCH_99000061.199786.1.999.date?||²ÂNNNvBIIlQJT1|CéÀ§äÛkR)*'O¾Ç:-s‰ ¥ × Ï'm~_Ï4æ! Æ ± G! P + Egaz 511257719_511257718_837P5010X12BATCH_99000061.199786.1 .999.datPK l ñ " – MikeAnthony

+0

Merci Vanna. Je peux voir que votre réponse aurait fonctionné mais une autre affiche a indiqué que puisque j'ai des données binaires qui ont été transformées en chaîne, il semble que les données soient corrompues. J'ai complètement réécrit le code et j'ai un problème connexe. Posté une nouvelle question à ce sujet ici: https://stackoverflow.com/questions/45578097/how-to-obtain-just-a-single-form-field-from-an-httpresponse-in-java-and-write- il – MikeAnthony

1

Vous pouvez créer un fichier avec une extension .zip à l'aide BufferedWriter mais ne vous attendez pas que fichier à un fichier de compression (qui est binaire)

Vous pouvez utiliser quelque chose comme ci-dessous

Regardez cet exemple :

StringBuilder sb = new StringBuilder(); 
sb.append("your string data"); 

File f = new File("c:\\payload.zip"); 
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f)); 
ZipEntry e = new ZipEntry("myFile.txt"); 
out.putNextEntry(e); 
byte[] data = sb.toString().getBytes(); 
out.write(data, 0, data.length); 
out.closeEntry(); 
out.close();