android解凍zipパッケージ
プロジェクトにはzipパッケージを解凍する必要があります.あるいはプロジェクトassetsのzipパッケージを携帯電話のSDカードにコピーして解凍します.ここで私はantを使っています.JArこのライブラリ:ant.jar
くだらないことは言わないで、直接ツール類と使用方法を添付します.
シーン1、プロジェクトassetsフォルダからzipパッケージを携帯電話sdカードにコピーして解凍します.
1、まずzipパッケージをsdカードにコピーする:
2、sdカードにコピーしたzipパッケージを解凍する:
これでzipパッケージがプロジェクトからsdにコピーされ、解凍されます.もちろん実際の項目ではメモリカードがあるかどうか、ファイルがあるかどうかなども判断しなければなりません.
シーン2、sdカードのフォルダをzipパッケージに圧縮する:
「FileName」は、サブファイルやサブフォルダがどれだけ入っていてもsdカードのフォルダパスです.ここで私の経路はos.Environment.getExternalStorageDirectory()+"/フォルダ名"
「ZipFileName」はzipパッケージに圧縮する必要があるパスです.例えば:android.os.Environment.getExternalStorageDirectory()+"/フォルダ名.zip"
はい、ファイルの解凍操作は大体これだけです.
くだらないことは言わないで、直接ツール類と使用方法を添付します.
public class UnZip{
/** * assets sd * @param context */
public static void CopyAssets(Context context, String zipName) {
AssetManager assetManager = context.getAssets();
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(zipName);
out = new FileOutputStream(
android.os.Environment.getExternalStorageDirectory() + "/"
+ zipName);
CopyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch (Exception e) {
Log.e("Test", e.getMessage());
}
}
private static void CopyFile(InputStream in, OutputStream out) throws IOException {
byte[] buf = new byte[1024];
int n;
while ((n = in.read(buf)) != -1) {
out.write(buf, 0, n);
}
}
/** * zip * * @param unZipfile * * @param destFile * */
public static void unZip(Context context, String unZipfile, String destFile)
throws IOException, FileNotFoundException, ZipException {
BufferedInputStream bi;
ZipFile zipFile = new ZipFile(new File(unZipfile), "GBK");
@SuppressWarnings("rawtypes")
Enumeration e = zipFile.getEntries();
while (e.hasMoreElements()) {
ZipEntry ze2 = (ZipEntry) e.nextElement();
String entryName = ze2.getName();
String path = destFile + "/" + entryName;
if (ze2.isDirectory()) {
System.out.println(" - " + entryName);
File decompressDirFile = new File(path);
if (!decompressDirFile.exists()) {
decompressDirFile.mkdirs();
}
} else {
System.out.println(" - " + entryName);
String fileDir = path.substring(0, path.lastIndexOf("/"));
File fileDirFile = new File(fileDir);
if (!fileDirFile.exists()) {
fileDirFile.mkdirs();
}
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(destFile + "/" + entryName));
bi = new BufferedInputStream(zipFile.getInputStream(ze2));
byte[] readContent = new byte[1024];
int readCount = bi.read(readContent);
while (readCount != -1) {
bos.write(readContent, 0, readCount);
readCount = bi.read(readContent);
}
bos.close();
}
}
zipFile.close();
}
/** * * * @param srcFile * * @param destFile * */
public static void doZip(String srcFile, String destFile) {// zipDirectoryPath:
File zipFile = new File(srcFile);
try {
// ZipOutputStream, ,
ZipOutputStream zipOut = new ZipOutputStream(
new BufferedOutputStream(new FileOutputStream(destFile)));
//
zipOut.setComment("comment");
// , ,
zipOut.setEncoding("GBK");
//
zipOut.setMethod(ZipOutputStream.DEFLATED);
// ,
zipOut.setLevel(Deflater.BEST_COMPRESSION);
handleFile(zipFile, zipOut, "");
//
zipOut.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/** * doZip , * * @param zipFile * @param zipOut * @param dirName * * @throws IOException */
private static void handleFile(File zipFile, ZipOutputStream zipOut, String dirName)
throws IOException {
System.out.println(" :" + zipFile.getName());
// ,
if (zipFile.isDirectory()) {
File[] files = zipFile.listFiles();
if (files.length == 0) {// , .
//
zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()
+ File.separator));
zipOut.closeEntry();
} else {// , ,
for (File file : files) {
// ,
handleFile(file, zipOut, dirName + zipFile.getName()
+ File.separator);
}
}
}
// ,
else {
FileInputStream fileIn = new FileInputStream(zipFile);
// ZipEntry
zipOut.putNextEntry(new ZipEntry(dirName + zipFile.getName()));
int length = 0;
byte[] buffer = new byte[1024];
//
while ((length = fileIn.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
// ZipEntry,
zipOut.closeEntry();
}
}
}
シーン1、プロジェクトassetsフォルダからzipパッケージを携帯電話sdカードにコピーして解凍します.
1、まずzipパッケージをsdカードにコピーする:
UnZip.CopyAssets(this, xxx.zip);
‘xxx.zip’パラメータは圧縮パケットの名前に接尾辞を付け、ここで私のパケットはassetsルートディレクトリに配置され、sdカードルートディレクトリにコピーされます.2、sdカードにコピーしたzipパッケージを解凍する:
UnZip.unZip(this, ZipFileName, UnZipLocation);
'ZipFileName' zip ,
:android.os.Environment.getExternalStorageDirectory() + "/xxx.zip"
'UnZipLocation' ,
:android.os.Environment.getExternalStorageDirectory() + "/"
これでzipパッケージがプロジェクトからsdにコピーされ、解凍されます.もちろん実際の項目ではメモリカードがあるかどうか、ファイルがあるかどうかなども判断しなければなりません.
シーン2、sdカードのフォルダをzipパッケージに圧縮する:
UnZip.doZip(FileName, ZipFileName);
「FileName」は、サブファイルやサブフォルダがどれだけ入っていてもsdカードのフォルダパスです.ここで私の経路はos.Environment.getExternalStorageDirectory()+"/フォルダ名"
「ZipFileName」はzipパッケージに圧縮する必要があるパスです.例えば:android.os.Environment.getExternalStorageDirectory()+"/フォルダ名.zip"
はい、ファイルの解凍操作は大体これだけです.