使用Java导出zip压缩包,压缩包中包含一个文件夹和一个文件,其中文件夹包含另一个文件。
代码:
package com.sunshuo.start;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class MainTest {
public static void main(String[] args) {
doExport();
}
private static void doExport() {
String path = "D:\\tempfolder\\zip_outer\\";
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
File zipFile = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
// 压缩包名
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String dateString = formatter.format(currentTime);
zipFile = new File(path + "sunshuo_" + dateString + ".zip");
zipFile.createNewFile();
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(fos);
zos.setEncoding("GBK"); // 防止压缩包里文件名乱码
// 文件01,在文件夹01里
String file01Name = "文件夹01\\文件01.txt";
ZipEntry zipEntry1 = new ZipEntry(file01Name);
zos.putNextEntry(zipEntry1);
String content1 = "文件内容1111";
zos.write(content1.getBytes("UTF-8"));
// 文件02,在根目录下
String file02Name = "文件02.txt";
ZipEntry zipEntry2 = new ZipEntry(file02Name);
zos.putNextEntry(zipEntry2);
String content2 = "文件内容2222";
zos.write(content2.getBytes("UTF-8"));
zos.flush();
zos.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(fos != null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
总结点:
1)如果想把文件放入到zip包里目录中,可以使用拼接路径的方式。比如文件01。
2)如果压缩包中的文件名乱码,可以使用zos.setEncoding(“GBK”); 方式解决。
3)zos.setEncoding(“GBK”);中,ZipOutputStream的全路径是org.apache.tools.zip.ZipOutputStream,ZipEntry的全路径是org.apache.tools.zip.ZipEntry,需要借助第三方的包。