102 lines
3.9 KiB
Plaintext
102 lines
3.9 KiB
Plaintext
|
|
import ArchiveEntry from "org.apache.commons.compress.archivers.ArchiveEntry";
|
|
import ArchiveStreamFactory from "org.apache.commons.compress.archivers.ArchiveStreamFactory";
|
|
import ZipArchiveInputStream from "org.apache.commons.compress.archivers.zip.ZipArchiveInputStream";
|
|
import ZipArchiveEntry from "org.apache.commons.compress.archivers.zip.ZipArchiveEntry";
|
|
import ZipArchiveOutputStream from "org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream";
|
|
import IOUtils from "org.apache.commons.compress.utils.IOUtils";
|
|
import File from "java.io.File";
|
|
import FileOutputStream from "java.io.FileOutputStream";
|
|
import IOException from "java.io.IOException";
|
|
import InputStream from "java.io.InputStream";
|
|
import ArchiveStreamProvider from 'org.apache.commons.compress.archivers.ArchiveStreamProvider'
|
|
import URL from 'java.net.URL';
|
|
import FileInputStream from 'java.io.FileInputStream';
|
|
import BufferedInputStream from 'java.io.BufferedInputStream';
|
|
import BufferedOutputStream from 'java.io.BufferedOutputStream';
|
|
// import { FileManager } from "ZIPFoundation"
|
|
import ArchiveInputStream from 'org.apache.commons.compress.archivers.ArchiveInputStream';
|
|
import Deflater from 'java.util.zip.Deflater';
|
|
|
|
function compressDirectoryToZipFile(rootDir : File,sourceDir : File,zipOut : ZipArchiveOutputStream) {
|
|
// 获取目录下的所有文件和子目录
|
|
let listfiles = sourceDir.listFiles();
|
|
if(listfiles==null) return;
|
|
listfiles.forEach(file => {
|
|
let relativePath = file.absolutePath.substring(rootDir.absolutePath.length + 1)
|
|
if (file.isDirectory) {
|
|
// 如果是目录,创建一个目录条目(以 "/" 结尾)
|
|
let dirEntry = new ZipArchiveEntry(relativePath + "/")
|
|
zipOut.putArchiveEntry(dirEntry)
|
|
zipOut.closeArchiveEntry()
|
|
// 递归压缩子目录
|
|
compressDirectoryToZipFile(rootDir, file, zipOut)
|
|
} else {
|
|
// 如果是文件,创建文件条目并写入内容
|
|
let fileEntry = new ZipArchiveEntry(relativePath)
|
|
zipOut.putArchiveEntry(fileEntry)
|
|
let bis = BufferedInputStream(FileInputStream(file));
|
|
let buffer = ByteArray(1024)
|
|
var len : Int = bis.read(buffer)
|
|
while (len != -1) {
|
|
zipOut.write(buffer, 0, len)
|
|
len = bis.read(buffer)
|
|
}
|
|
zipOut.closeArchiveEntry()
|
|
}
|
|
})
|
|
|
|
|
|
}
|
|
|
|
export const addZip = (path : string, target : string,callback:(path:string)=>void) => {
|
|
let sourceDirectory = new File(UTSAndroid.convert2AbsFullPath(path))
|
|
// 检查源目录是否存在
|
|
if (!sourceDirectory.exists() || !sourceDirectory.isDirectory) {
|
|
throw IllegalArgumentException("Source directory does not exist or is not a directory")
|
|
}
|
|
let fos = new FileOutputStream(UTSAndroid.convert2AbsFullPath(target))
|
|
let zipOut = ZipArchiveOutputStream(fos)
|
|
// 设置压缩方法
|
|
zipOut.setMethod(ZipArchiveOutputStream.DEFLATED)
|
|
zipOut.setLevel(Deflater.BEST_SPEED)
|
|
// 压缩目录
|
|
compressDirectoryToZipFile(sourceDirectory, sourceDirectory, zipOut)
|
|
callback(UTSAndroid.convert2AbsFullPath(target))
|
|
}
|
|
export const addZipAndSaveDisk = (path : string, filename : string, callback : (path : string) => void) => {
|
|
|
|
}
|
|
|
|
|
|
export const unZip = (path : string, target : string) => {
|
|
let failepath = UTSAndroid.convert2AbsFullPath(path)
|
|
let targetpath = UTSAndroid.convert2AbsFullPath(target)
|
|
let outputDir = new File(targetpath);
|
|
if (!outputDir.exists()) {
|
|
outputDir.mkdirs();
|
|
}
|
|
|
|
let fis = new FileInputStream(failepath);
|
|
let zipIn = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, fis) as ZipArchiveInputStream
|
|
let entry = zipIn.getNextEntry();
|
|
|
|
while (entry != null) {
|
|
console.log(entry.getName())
|
|
let outputFile = new File(outputDir, entry.getName())
|
|
if (entry.isDirectory()) {
|
|
outputFile.mkdirs()
|
|
} else {
|
|
outputFile.parentFile?.mkdirs()
|
|
let bos = new BufferedOutputStream(FileOutputStream(outputFile))
|
|
let buffer = new ByteArray(1024)
|
|
var len : Int = zipIn.read(buffer)
|
|
while (len != -1) {
|
|
bos.write(buffer, 0, len);
|
|
len = zipIn.read(buffer)
|
|
}
|
|
}
|
|
entry = zipIn.getNextEntry();
|
|
}
|
|
|
|
} |