Lecture d'un fichier dans une archive Zip et mettre son contenu dans une Chaîne de caractères dans Android
c'est ma première question, bien que j'ai déjà utilisé beaucoup de conseils de Débordement de la Pile. Mais pour cette situation, je n'ai pas trouvé de solution pour le moment.
Voici la situation: j'ai un fichier zippé et je veux lire un fichier spécifique et mettre son contenu dans une variable de Chaîne, qui sera retourné et mis dans un TextView Android. Je ne veux pas que le fichier soit écrit sur sdcard, je veux juste effectuer une opération de mémoire.
Par exemple, à l'intérieur de db.zip j'ai un fichier nommé packed.txt, dont le contenu est "Pile á é ç". La Chaîne retournée dans ma méthode montre "83 116 97 99 107 32 195 161 32 (...)" qui sont les valeurs UTF-8 pour les personnages. J'ai essayé jusqu'à présent de la conversion em pour un homme readble forme, mais sans succès. Essayé InputStreamReader mais je ne pouvais pas faire un bon usage. Mon code source est ci-dessous.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import android.util.Log;
/**
*
* @author jon
*/
public class Decompress {
private String _zipFile;
private String _location;
public Decompress(String zipFile, String location) {
_zipFile = zipFile;
_location = location;
_dirChecker("");
}
public String unzip(String desiredFile) {
String strUnzipped = "";
try {
FileInputStream fin = new FileInputStream(_zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
Log.v("Decompress", "Unzipping " + ze.getName());
if(ze.isDirectory()) {
_dirChecker(ze.getName());
} else {
//FileOutputStream fout = new FileOutputStream(_location + ze.getName());
/**** Changes made below ****/
if (ze.getName().toString().equals(desiredFile)) {
byte[] bytes = new byte[(int) ze.getSize()];
if (zin.read(bytes, 0, bytes.length) == bytes.length) {
strUnzipped = new String(bytes, "UTF-8");
}
else {
strUnzipped = "Read error...";
}
/*** REMOVED
if (ze.getName() == desiredFile) {
for (int c = zin.read(); c != -1; c = zin.read()) {
strUnzipped += c;
//fout.write(c);
} */
}
zin.closeEntry();
//fout.close();
}
}
zin.close();
} catch(Exception e) {
Log.e("Decompress", "unzip", e);
}
return strUnzipped;
}
private void _dirChecker(String dir) {
File f = new File(_location + dir);
if(!f.isDirectory()) {
f.mkdirs();
}
}
}
Vous devez vous connecter pour publier un commentaire.
Désolé pour ma première publication du présent .... a couru à droite au-dessus de votre paragraphe indiquant que vous avait essayé.
Vous pouvez créer le InputStreamReader avec un jeu de caractères UTF-8" qui sera automatiquement convertir les données d'entrée dans les caractères corrects pour vous.
Essayez de la manière ci-dessus et de voir comment elle fonctionne.
Pourquoi ne pas les charger dans un tableau d'octets et d'utiliser de nouvelles String(byte[]) ou utiliser StringBuilder?