importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.Enumeration;importjava.util.List;importjava.util.zip.ZipFile;//这里注意不能采用java下面的类包,不然没有设置编码的方法
importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.ZipOutputStream;
public classZipUtil {public static final String ZIP_FILENAME = ""; //需要解压缩的文件名
public static final String ZIP_DIR = ""; //需要压缩的文件夹
public static final String UN_ZIP_DIR = ""; //要解压的文件目录
public static final int BUFFER = 1024; //缓存大小
public static voidmain(String[] args) {try{
zipFile("F:\\page","F:\\page\\demo.zip");
}catch(Exception e) {
e.printStackTrace();
}
}public static voidzipFile(String baseDir, String fileName)throwsException {
List fileList= getSubFiles(newFile(baseDir));
ZipOutputStream zos= newZipOutputStream(newFileOutputStream(fileName));
ZipEntry ze= null;byte[] buf = new byte[BUFFER];int readLen = 0;for (int i = 0; i < fileList.size(); i++) {
File f=(File) fileList.get(i);
ze= newZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStream is= new BufferedInputStream(newFileInputStream(f));while ((readLen = is.read(buf, 0, BUFFER)) != -1) {
zos.write(buf,0, readLen);
}
is.close();
}
zos.setEncoding("gbk");
zos.close();
}private staticString getAbsFileName(String baseDir, File realFileName) {
File real=realFileName;
File base= newFile(baseDir);
String ret=real.getName();while (true) {
real=real.getParentFile();if (real == null)break;if(real.equals(base))break;elseret= real.getName() + "/" +ret;
}returnret;
}private staticList getSubFiles(File baseDir) {
List ret= newArrayList();
File[] tmp=baseDir.listFiles();for (int i = 0; i < tmp.length; i++) {if(tmp.isFile())
ret.add(tmp);if(tmp.isDirectory())
ret.addAll(getSubFiles(tmp));
}returnret;
}public static void upZipFile() throwsException {
ZipFile zfile= newZipFile(ZIP_FILENAME);
Enumeration zList=zfile.entries();
ZipEntry ze= null;byte[] buf = new byte[1024];while(zList.hasMoreElements()) {
ze=(ZipEntry) zList.nextElement();if(ze.isDirectory()) {
File f= new File(ZIP_DIR +ze.getName());
f.mkdir();continue;
}
OutputStream os= new BufferedOutputStream(newFileOutputStream(
getRealFileName(ZIP_DIR, ze.getName())));
InputStream is= newBufferedInputStream(zfile.getInputStream(ze));int readLen = 0;while ((readLen = is.read(buf, 0, 1024)) != -1) {
os.write(buf,0, readLen);
}
is.close();
os.close();
}
zfile.close();
}public staticFile getRealFileName(String baseDir, String absFileName) {
String[] dirs= absFileName.split("/");
File ret= newFile(baseDir);if (dirs.length > 1) {for (int i = 0; i < dirs.length - 1; i++) {
ret= newFile(ret, dirs);
}if (!ret.exists())
ret.mkdirs();
ret= new File(ret, dirs[dirs.length - 1]);returnret;
}returnret;
}public static voiddeleteDirFile(String path) {
File file= newFile(path);if (file.isDirectory()) { //如果是目录,先递归删除
String[] list =file.list();for (int i = 0; i < list.length; i++) {
deleteDirFile(path+ "\\" + list); //先删除目录下的文件
}
}
file.delete();
}public staticString newFolder(String dir) {
java.io.File myFilePath= newjava.io.File(dir);if(myFilePath.isDirectory()) {
}else{
myFilePath.mkdirs();
}returndir;
}public staticString getFileNames(String path) {
File file= new File(path); //get file list where the path has
File[] array = file.listFiles(); //获得文件列表
String pdfNames = "";for (int i = 0; i < array.length; i++) {if(array.isFile()) {if (array.getName().endsWith(".pdf")) { //获得pdf文件名称
pdfNames += array.getName().substring(0,
array.getName().length()- 4)+ ",";
}
}
}if (pdfNames.length() > 0) {
pdfNames.substring(0, pdfNames.length() - 1);
}returnpdfNames;
}public static voidcopyFile(String oldPath, String newPath) {try{int bytesum = 0;int byteread = 0;
File oldfile= newFile(oldPath);if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = newFileOutputStream(newPath);byte[] buffer = new byte[1444];while ((byteread = inStream.read(buffer)) != -1) {
bytesum+= byteread; //字节数文件大小
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}catch(Exception e) {
System.out.println("copy file error!");
e.printStackTrace();
}
}public static booleanfileExist(String fileNames, String pdfName) {boolean flag = false;if (!"".equals(fileNames)) {
String[] nameArr= fileNames.split(",");for (int i = 0; i < nameArr.length; i++) {if (pdfName.equals(nameArr)) { //如果文件名相同则执行拷贝操作(拷贝到zip目录准备打包)
flag = true;break;
}
}
}returnflag;
}public static voiddeleteFileAndDir(String path) {
File file= newFile(path);
File[] array=file.listFiles();for (int i = 0; i < array.length; i++) {if(array.isFile()) {
array.delete();
}else if(array.isDirectory()) {
deleteDirFile(array.getPath());
}
}
}
}
该代码示例展示了如何使用Java和Apache的zip工具包进行文件压缩和解压缩操作,包括读取、写入、设置编码、创建目录等。主要涉及ZipOutputStream、ZipEntry、FileInputStream和FileOutputStream等类。
1522

被折叠的 条评论
为什么被折叠?



