您的位置:首页 > 编程语言 > Java开发

java 文件和文件夹的压缩实现

2014-01-05 17:39 507 查看
import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class ContainerTest {

static ArrayList<String> strFileArr = new ArrayList<String>();

/**

* 打印字符串列表

*/

public static void printFilePath(ArrayList<String> strFileArr)

{

System.out.println("File path is:");

Iterator<String> it = strFileArr.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

//打印文件夹下文件路径

public static void print(File filename)

{

if(filename != null){

File[] fileArray=filename.listFiles();

for (int i = 0; i < fileArray.length; i++) {

if(!fileArray[i].isDirectory()){

System.out.println(fileArray[i].toString());

}

else{

System.out.println("Is directory :\n" + fileArray[i].toString());

print(fileArray[i]);

}

}

}

}

//压缩单个文件

public static void zipFile(String filesrc, String filedes)

{

int ilast = filedes.lastIndexOf(File.separator);

byte[] buffer = new byte[1024];

int len;

try {

FileOutputStream fos = new FileOutputStream(filedes);

ZipOutputStream zos = new ZipOutputStream(fos);

String zipfileStr = filesrc.substring(ilast+1);

ZipEntry ze= new ZipEntry(zipfileStr);

zos.putNextEntry(ze);

FileInputStream in = new FileInputStream(filesrc);

while ((len = in.read(buffer)) > 0) {

zos.write(buffer, 0, len);

}

in.close();

zos.closeEntry();

zos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//生成文件夹下各个文件的相对路径

public static void generateFileStr(String filesrc,String srcPathDir)

{

File file = new File(filesrc);

if(file!=null){

String strTmp ="";

if(file.isDirectory()){

File[] fileArray=file.listFiles();

for (int i = 0; i < fileArray.length; i++){

strTmp = fileArray[i].toString();

if(!fileArray[i].isDirectory()){

strFileArr.add(strTmp.substring(srcPathDir.length()+1));

System.out.println(strTmp);

}

else{

generateFileStr(strTmp,srcPathDir);

}

}

}

else{

strTmp = filesrc.substring(filesrc.length()+1);

strFileArr.add(strTmp);

System.out.println(strTmp);

}

}

}

//压缩文件夹

public static void zipDir(String filesrc, String filedes)

{

System.out.println("zipDir");

File file = new File(filesrc);

if(file.isDirectory()){

generateFileStr(filesrc , filesrc);

byte[] buffer = new byte[1024];

int len;

try {

String filepath = null;

FileOutputStream fos = new FileOutputStream(filedes);

ZipOutputStream zos = new ZipOutputStream(fos);

for(int i = 0; i< strFileArr.size(); i++){

filepath = filesrc + File.separator + strFileArr.get(i);

System.out.println(filepath);

String zipfileStr =strFileArr.get(i);

System.out.println("zipDir zipfileStr :"+zipfileStr);

ZipEntry ze= new ZipEntry(zipfileStr);

zos.putNextEntry(ze);

File fileitem = new File(filepath);

System.out.println("zipDir filepath :"+filepath);

if(fileitem.isFile()){

FileInputStream in = new FileInputStream(fileitem);

while ((len = in.read(buffer)) > 0) {

zos.write(buffer, 0, len);

}

in.close();

}

else{

}

}

zos.closeEntry();

zos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

String zipFile = new String("D:" + File.separator + "zipFile.zip");

String srcfile = new String("E:" + File.separator +"test" );

zipDir(srcfile, zipFile);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: