java 打包乱码_java zip打包与乱码的解决

该代码示例展示了如何使用Java和Apache的zip工具包进行文件压缩和解压缩操作,包括读取、写入、设置编码、创建目录等。主要涉及ZipOutputStream、ZipEntry、FileInputStream和FileOutputStream等类。

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());

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值