java 项目总是有上传 zip 包和下载 zip 包的需求,这时就得用 ZipInputStream 和 ZipOutputStream 类。
压缩文件就是先读取一个文件夹的内容,创建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 读取源文件内容并写入 ZipOutputStream。
/**
* 压缩文件
* @param sourceFilePath 待压缩的文件路径
* @param zipFilePath 压缩后存放路径
* @return
*/
public static void zip(String sourceFilePath, String zipFilePath) {
File sourceFile = new File(sourceFilePath);
if (!sourceFile.exists()) {
System.out.println(sourceFilePath + " 不存在");
return;
}
File zipFile = new File(zipFilePath);
if (zipFile.exists()) {
System.out.println(zipFilePath + " 已经存在");
return;
}
try {
byte[] buffer = new byte[1024];
try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))){
for(File file: sourceFile.listFiles()) {
// 创建 ZIP 中的文件,并添加进压缩包
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
// 读取待压缩的文件并写进压缩包里
try (InputStream bis = new BufferedInputStream(new FileInputStream(file))){
int read = 0;
while ((read = bis.read(buffer)) != -1) {
zos.write(buffer, 0, read);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
一个压缩文件就是一个特殊的 File 叫做 ZipFile,用 Enumeration 类取出 zip 文件中被压缩的文件。
List< String > fileNames=new ArrayList< >();
try{
ZipFile zipFile=new ZipFile(path, Charset.forName("gbk"));
Enumeration< ? extends ZipEntry > entries = zipFile.entries();
while(entries.hasMoreElements()){
String fileName=entries.nextElement().getName();
fileNames.add(fileName);
System.out.println("文件名称: "+fileName);
}
}catch (Exception e){
e.printStackTrace();
}
解压文件 就是先用 zipFile.entries() 读取压缩文件夹中的文件, 生成 InputStream 流后写入被解压的 输出流
/**
* 解压
* @param zipPath zip 文件夹路径
* @param targetPath 解压路径
*/
public static void unzip(String zipPath,String targetPath){
File pathFile = new File(targetPath);
if(!pathFile.exists()){
pathFile.mkdirs();
}
try{
//指定编码
try(ZipFile zipFile = new ZipFile(zipPath, Charset.forName("gbk"))) {
//遍历里面的文件及文件夹
Enumeration entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
try (InputStream in = zipFile.getInputStream(entry)) {
String outpath = (targetPath + File.separator + zipEntryName);
//判断路径是否存在,不存在则创建文件路径
File file = new File(outpath.substring(0, outpath.lastIndexOf(File.separator)));
if (!file.exists()) {
file.mkdirs();
}
//判断文件全路径是否为文件夹
if (new File(outpath).isDirectory())
continue;
try (OutputStream out = new FileOutputStream(outpath)) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
}
}
}
}catch ( Exception e){
e.printStackTrace();
}
}
介绍了一下 java 中的压缩文件是如何解压与压缩的,对小伙伴们有帮助的话就点个赞哦。
全部0条评论
快来发表一下你的评论吧 !