назначение класса - доставать ресурсы напрямую из архива, который лежит в папке assets приложения, либо где-то на устройстве или флешке. ресурсы ( пока только графика и строки в UTF-8 ) помещаются сразу в контейнеры. собственно, как это сделать, я и хотел спросить, когда создавал тему.
package ru.turururu.turu;
import java.io.*;
import java.util.zip.*;
import android.content.Context;
import android.graphics.drawable.Drawable;
public class Unzip {
// у меня всегда в ассетс будет только 1 архив с данными, из которого нужно доставать ресурсы
public static String zipfilename = "data.zip";
public static String StreamToString(InputStream is) {
try {
return new java.util.Scanner(is).useDelimiter("\\A").next();
} catch (java.util.NoSuchElementException e) {
return "";
}
}
/* чтение строки из архива в Assets
* пример вызова из Activity:
* textview1.setText(Unzip.zipAssetsDrawable("text1.txt", getApplicationContext()));*/
public static String zipAssString(String filename, Context context) {
String s = "";
try {
ZipInputStream zipinputstream = new ZipInputStream(context.getAssets().open(zipfilename));
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null) {
if (filename.equalsIgnoreCase(zipentry.getName())) {
s = StreamToString(zipinputstream);
zipinputstream.closeEntry();
}
zipentry = zipinputstream.getNextEntry();
}
zipinputstream.close();
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
/* чтение строки из архива на диске
* пример вызова из Activity:
* textview1.setText(Unzip.zipFileString("/mnt/sdcard/Android/data/TestProject/archive.zip", "text1.txt"));*/
public static String zipFileString(String zipfilename, String filename) {
String s = "";
try {
FileInputStream is = new FileInputStream(zipfilename);
ZipInputStream zipinputstream = new ZipInputStream(is);
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null) {
if (filename.equalsIgnoreCase(zipentry.getName())) {
s = StreamToString(zipinputstream);
zipinputstream.closeEntry();
}
zipentry = zipinputstream.getNextEntry();
}
zipinputstream.close();
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
/* Чтение картинки из архива в Assets. Пример вызова из Activity:
* imageview1.setImageDrawable(Unzip.zipAssetsDrawable("image1.jpg", getApplicationContext()));
* в папке Assets открывается архив assets.zip и из него извлекается
* картинка filename сразу в Drawable */
public static Drawable zipAssDrawable(String filename, Context context) {
Drawable d = null;
try {
InputStream is = context.getAssets().open(zipfilename);
ZipInputStream zipinputstream = new ZipInputStream(is);
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null) {
String entryName = zipentry.getName();
if (entryName.equalsIgnoreCase(filename)) {
d = Drawable.createFromStream(zipinputstream, entryName);
zipinputstream.closeEntry();
}
zipentry = zipinputstream.getNextEntry();
}
zipinputstream.close();
} catch (Exception e) {
e.printStackTrace();
}
return d;
}
/* чтение картинки из архива на диске
* в zipfilename - путь и имя архива,
* в filename - имя искомого файла
* пример вызова из Assets:
* imageview1.setImageDrawable(Unzip.zipFileDrawable("/mnt/sdcard/Android/data/TestProject/archive.zip", "image1.jpg"); */
public static Drawable zipFileDrawable(String zipfilename, String filename) {
Drawable d = null;
try {
FileInputStream is = new FileInputStream(zipfilename);
ZipInputStream zipinputstream = new ZipInputStream(is);
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null) {
String entryName = zipentry.getName();
if (entryName.equalsIgnoreCase(filename)) {
d = Drawable.createFromStream(zipinputstream, entryName);
zipinputstream.closeEntry();
}
zipentry = zipinputstream.getNextEntry();
}
zipinputstream.close();
} catch (Exception e) {
e.printStackTrace();
}
return d;
}
}