java 压缩
1.大家好 : java 压缩文件时压缩文件==1KB是无法解压,请高手给点指教
package com.ImageUpload;
import java.io.File;
import java.text.FieldPosition;
import java.util.List;
import android.util.Log;
/*
* 压缩文件类
*/
public class Compress {
public Compress(){
}
/**
* 取得压缩包中的 文件列表(文件夹,文件自选)
* @param zipFileString 压缩包名字
* @param bContainFolder 是否包括 文件夹
* @param bContainFile 是否包括 文件
* @return
* @throws Exception
*/
public static java.util.List<java.io.File> GetFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {
java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();
Log.i("fileList====", fileList.toString());
java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
Log.i("inZip====", inZip.toString());
java.util.zip.ZipEntry zipEntry;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
Log.i("szName====", szName);
if (zipEntry.isDirectory()) {
// get the folder name of the widget
szName = szName.substring(0, szName.length() - 1);
Log.i("szName===111111=", szName);
java.io.File folder = new java.io.File(szName);
Log.i("folder====", folder.toString());
if (bContainFolder) {
fileList.add(folder);
}
} else {
java.io.File file = new java.io.File(szName);
Log.i("file====", file.toString());
if (bContainFile) {
fileList.add(file);
}
}
}//end of while
inZip.close();
return fileList;
}
/**
* 返回压缩包中的文件InputStream
* @param zipFileString 压缩文件的名字
* @param fileString 解压文件的名字
* @return InputStream
* @throws Exception
*/
public static java.io.InputStream UpZip(String zipFileString, String fileString)throws Exception {
java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFileString);
Log.i("zipFile====", zipFile.toString());
java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);
Log.i("zipEntry====", zipEntry.toString());
return zipFile.getInputStream(zipEntry);
}
/**
* 解压一个压缩文档 到指定位置
* @param zipFileString 压缩包的名字
* @param outPathString 指定的路径
* @throws Exception
*/
public static void UnZipFolder(String zipFileString, String outPathString)throws Exception {
java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
java.util.zip.ZipEntry zipEntry;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
// get the folder name of the widget
szName = szName.substring(0, szName.length() - 1);
java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
Log.i("folder===wwwwww=", folder.toString());
folder.mkdirs();
} else {
java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
Log.i("file===aaaaaaa", file.toString());
file.createNewFile();
// get the output stream of the file
java.io.FileOutputStream out = new java.io.FileOutputStream(file);
int len;
byte[] buffer = new byte[1024];
// read (len) bytes into buffer
while ((len = inZip.read(buffer)) != -1) {
// write (len) byte from buffer at the position 0
out.write(buffer, 0, len);
out.flush();
}
out.close();
}
}//end of while
inZip.close();
}//end of func
/**
* 压缩文件,文件夹
* @param srcFileString 要压缩的文件/文件夹名字
* @param zipFileString 指定压缩的目的和名字
* @return
* @throws Exception
*/
public static String ZipFolder(String srcFileString, String zipFileString)throws Exception {
//创建Zip包
File f=new File(ImageUpload.SelectedPaths.get(0));
java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFileString));
Log.i("outZip",outZip.toString());
//打开要输出的文件
java.io.File file = new java.io.File(srcFileString);
Log.i("file====ffffffff",file.toString());
//压缩
ZipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);
//完成,关闭
outZip.flush();
outZip.finish();
outZip.close();
return zipFileString;
}//end of func
public static String ZipFolder(List<String> srcFileStrings, String zipFileString)throws Exception {
//创建Zip包
File f=new File(ImageUpload.SelectedPaths.get(0));
java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(f));
for (String srcFileString : srcFileStrings) {
//打开要输出的文件
java.io.File file = new java.io.File(srcFileString);
Log.i("file====fffffsdfdsfdsfdsfff",file.toString());
//压缩
ZipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);
}
//完成,关闭
outZip.flush();
outZip.close();
return zipFileString;
}//end of func
/**
* 压缩文件
* @param folderString
* @param fileString
* @param zipOutputSteam
* @throws Exception
*/
private static void ZipFiles(String folderString, String fileString, java.util.zip.ZipOutputStream zipOutputSteam)throws Exception{
if(zipOutputSteam == null){
return; }
java.io.File file = new java.io.File(folderString+fileString);
Log.i("file=bbbbbbbbbbbbbbbbbbbbbbbbb==ffffffff",file.toString());
//判断是不是文件
if (file.isFile()) {
java.util.zip.ZipEntry zipEntry = new java.util.zip.ZipEntry(fileString);
Log.i("zipEntry=======00000000000000000",zipEntry.toString());
java.io.FileInputStream inputStream = new java.io.FileInputStream(file);
Log.i("inputStream=======00000000000000000",inputStream.toString());
zipOutputSteam.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[4096];
while((len=inputStream.read(buffer)) != -1)
{
zipOutputSteam.write(buffer, 0, len);
zipOutputSteam.flush();
}
zipOutputSteam.closeEntry();
}
else {
//文件夹的方式,获取文件夹下的子文件
String[] fileList = file.list();
Log.i("fileList=======00000000000000000",fileList.toString());
//如果没有子文件, 则添加进去即可
if (fileList.length <= 0) {
java.util.zip.ZipEntry zipEntry = new java.util.zip.ZipEntry(fileString+java.io.File.separator);
Log.i("fileString+java.io.File.separator=======00000000000000000",zipEntry.toString());
zipOutputSteam.putNextEntry(zipEntry);
zipOutputSteam.closeEntry();
}
// //如果有子文件, 遍历子文件
// for (int i = 0; i < fileList.length; i++) {
// ZipFiles(folderString, fileString+java.io.File.separator+fileList[i], zipOutputSteam);
// }//end of for
}//end of if
}//end of func
public void finalize() throws Throwable {
}
}