feat[zip]: zip directory

This commit is contained in:
godotg
2024-05-14 16:01:48 +08:00
parent 82b02d6605
commit a3793f106c
2 changed files with 32 additions and 12 deletions
@@ -12,11 +12,14 @@
package com.zfoo.net.util.security;
import com.zfoo.protocol.collection.CollectionUtils;
import com.zfoo.protocol.util.FileUtils;
import com.zfoo.protocol.util.IOUtils;
import com.zfoo.protocol.util.StringUtils;
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.zip.*;
/**
@@ -69,6 +72,9 @@ public abstract class ZipUtils {
// -----------------------------------------------------------------------------------------------------------------
/**
* default charset is UTF-8
*/
public static void zip(String[] sourceFilePaths, String zipFilePath) {
FileOutputStream fos = null;
ZipOutputStream zipOut = null;
@@ -76,15 +82,28 @@ public abstract class ZipUtils {
fos = new FileOutputStream(zipFilePath);
zipOut = new ZipOutputStream(fos);
for (var sourceFilePath : sourceFilePaths) {
var fileToZip = new File(sourceFilePath);
if (fileToZip.isHidden()) {
continue;
var file = new File(sourceFilePath);
if (file.isDirectory()) {
var files = FileUtils.getAllReadableFiles(file);
for (var f : files) {
if (f.isHidden()) {
continue;
}
var fis = new FileInputStream(f);
var subPath = StringUtils.substringAfterFirst(f.getAbsolutePath(), file.getParentFile().getAbsolutePath());
subPath = StringUtils.substringAfterFirst(subPath, file.getName());
ZipEntry zipEntry = new ZipEntry(file.getName() + subPath);
zipOut.putNextEntry(zipEntry);
IOUtils.copy(fis, zipOut);
IOUtils.closeIO(fis);
}
} else {
var fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(file.getName());
zipOut.putNextEntry(zipEntry);
IOUtils.copy(fis, zipOut);
IOUtils.closeIO(fis);
}
var fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
IOUtils.copy(fis, zipOut);
IOUtils.closeIO(fis);
}
} catch (Exception e) {
throw new RuntimeException(e);
@@ -94,6 +113,9 @@ public abstract class ZipUtils {
}
/**
* default charset is UTF-8
*/
public static void unzip(String zipFilePath, String destDirectory) {
try {
unzip(FileUtils.openInputStream(new File(zipFilePath)), destDirectory);
@@ -15,8 +15,6 @@ package com.zfoo.net.util.security;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
/**
* @author godotg
*/
@@ -48,8 +46,8 @@ public class ZipTest {
@Test
public void zipTest() {
var sourceFiles = new String[]{"./README.md","./README_CN.md"};
ZipUtils.zip(sourceFiles, "./ai-simulator.zip");
var sourceFiles = new String[]{"./src","./README.md"};
ZipUtils.zip(sourceFiles, "./my-source.zip");
}
@Test