文件操作。简单的压缩、解压缩等

importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.ArrayList;
importjava.util.Enumeration;
importjava.util.List;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipFile;
importjava.util.zip.ZipOutputStream;

publicclassZipToFile{

publicstaticfinalStringZIP_FILENAME="C:\\XJPDA.zip";//需要解压缩的文件名
publicstaticfinalStringZIP_DIR="C:\\XJPDA\\";//需要压缩的文件夹
publicstaticfinalStringUN_ZIP_DIR="C:\\";//要解压的文件目录
publicstaticfinalintBUFFER=1024;//缓存大小

/**
*zip压缩功能.
*压缩baseDir(文件夹目录)下所有文件,包括子目录
*@throwsException
*/
publicstaticvoidzipFile(StringbaseDir,StringfileName)throwsException{
ListfileList=getSubFiles(newFile(baseDir));
ZipOutputStreamzos=newZipOutputStream(newFileOutputStream(fileName));
ZipEntryze=null;
byte[]buf=newbyte[BUFFER];
intreadLen=0;
for(inti=0;i<fileList.size();i++){
Filef=(File)fileList.get(i);
ze=newZipEntry(getAbsFileName(baseDir,f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStreamis=newBufferedInputStream(newFileInputStream(f));
while((readLen=is.read(buf,0,BUFFER))!=-1){
zos.write(buf,0,readLen);
}
is.close();
}
zos.close();
}

/**
*给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
*@parambaseDirjava.lang.String根目录
*@paramrealFileNamejava.io.File实际的文件名
*@return相对文件名
*/
privatestaticStringgetAbsFileName(StringbaseDir,FilerealFileName){
Filereal=realFileName;
Filebase=newFile(baseDir);
Stringret=real.getName();
while(true){
real=real.getParentFile();
if(real==null)
break;
if(real.equals(base))
break;
else
ret=real.getName()+"/"+ret;
}
returnret;
}

/**
*取得指定目录下的所有文件列表,包括子目录.
*@parambaseDirFile指定的目录
*@return包含java.io.File的List
*/
privatestaticListgetSubFiles(FilebaseDir){
Listret=newArrayList();
File[]tmp=baseDir.listFiles();
for(inti=0;i<tmp.length;i++){
if(tmp[i].isFile())
ret.add(tmp[i]);
if(tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
returnret;
}

/**
*解压缩功能.
*将ZIP_FILENAME文件解压到ZIP_DIR目录下.
*@throwsException
*/
publicstaticvoidupZipFile()throwsException{
ZipFilezfile=newZipFile(ZIP_FILENAME);
EnumerationzList=zfile.entries();
ZipEntryze=null;
byte[]buf=newbyte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
Filef=newFile(ZIP_DIR+ze.getName());
f.mkdir();
continue;
}
OutputStreamos=newBufferedOutputStream(newFileOutputStream(getRealFileName(ZIP_DIR,ze.getName())));
InputStreamis=newBufferedInputStream(zfile.getInputStream(ze));
intreadLen=0;
while((readLen=is.read(buf,0,1024))!=-1){
os.write(buf,0,readLen);
}
is.close();
os.close();
}
zfile.close();
}

/**
*给定根目录,返回一个相对路径所对应的实际文件名.
*@parambaseDir指定根目录
*@paramabsFileName相对路径名,来自于ZipEntry中的name
*@returnjava.io.File实际的文件
*/
publicstaticFilegetRealFileName(StringbaseDir,StringabsFileName){
String[]dirs=absFileName.split("/");
Fileret=newFile(baseDir);
if(dirs.length>1){
for(inti=0;i<dirs.length-1;i++){
ret=newFile(ret,dirs[i]);
}
if(!ret.exists())
ret.mkdirs();
ret=newFile(ret,dirs[dirs.length-1]);
returnret;
}
returnret;
}

}

不过上面存在中文问题
是因为java.util.zip下的格式转换有问题

import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
改成
import org.apache.tools.zip.*;
即可!
apache里修正了这一现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值