# CommonsCompressEts
**Repository Path**: liuyasha/CommonsCompressEts
## Basic Information
- **Project Name**: CommonsCompressEts
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 34
- **Created**: 2022-06-28
- **Last Updated**: 2022-06-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# commons-compress
## 简介
commons-compress组件定义了一个用于处理压缩和存档格式的 API,包含bzip2、gzip、lzma、xz、Snappy、LZ4、Brotli、DEFLATE、Zstandard 和 ar、cpio、tar、zip、dump、7z等格式的压缩/解压功能。

## 下载
```
npm install @ohos/commons-compress --save
```
OpenHarmony npm环境配置等更多内容,请参照 [如何安装OpenHarmony npm包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_npm_usage.md) 。
## 使用说明
### zip 压缩功能
指定文件夹路径压缩zip文件夹。
``` javascript
import {zipCompress} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
jsZipTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
zipCompress(data + '/' + this.newFolder, data + '/' + this.newFolder + '.zip').then((isSuccess) => {
if (isSuccess) {
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/',
confirm: { value: 'OK', action: () => {
this.isDeCompressGZipShow = true
} }
})
}
})
})
}
```
### zip 解压功能
指定文件夹路径解压zip文件夹。
``` javascript
import {zipDeCompress} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
unJsZipTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
zipDeCompress(data + '/' + this.newFolder + '.zip')
.then((isZipDecompree) => {
if (isZipDecompree) {
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + "/newTarget",
confirm: { value: 'OK', action: () => {
} }
})
}
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### gzip 压缩功能
指定文件夹路径压缩gz文件夹。
``` javascript
import {gzipFile} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
gzipFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
console.info('directory obtained. Data:' + data);
gzipFile(data + '/cache_images/hello.txt', data + '/cache_files/test.txt.gz')
.then((isSuccess) => {
if (isSuccess) {
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/cache_files/test.txt.gz',
confirm: { value: 'OK', action: () => {
this.isDeCompressGZipShow = true
} }
})
}
});
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### gzip 解压功能
指定文件夹路径解压gz文件夹。
``` javascript
import {unGzipFile} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
unGzipFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
unGzipFile(data + '/cache_files/test.txt.gz', data + '/cache_images/test.txt')
.then((isSuccess) => {
if (isSuccess) {
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/cache_images/test.txt',
confirm: { value: 'OK', action: () => {
} }
})
}
});
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### xz 压缩功能
指定文件夹路径压缩XZ文件夹。
```javascript
import {File, OutputStream,InputStream,IOUtils,CompressorStreamFactory,CompressorOutputStream} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
testXZCreation(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
console.info('directory obtained. Data:' + data);
let input = new File(data, "/cache_files/hello.txt");
let output = new File(data, "/cache_files/hello.txt.xz");
let out:OutputStream = new OutputStream();
let input1:InputStream = new InputStream();
out.setFilePath(output.getPath());
input1.setFilePath(input.getPath());
let cos: CompressorOutputStream = new CompressorStreamFactory(false).createCompressorOutputStream("xz", out)
IOUtils.copy(input1, cos);
cos.close();
input1.close()
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/cache_files/hello.txt.xz',
confirm: { value: 'OK', action: () => {
this.isDeCompressBzip2Show = true
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### xz 解压功能
指定文件夹路径解压XZ文件夹。
```javascript
import {File, OutputStream,InputStream,IOUtils,CompressorStreamFactory,CompressorInputStream} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
unXZFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
let input = new File(data, "/cache_files/hello.txt.xz");
let output = new File(data, "/cache_files/hello1.txt");
let out: OutputStream = new OutputStream();
let input1: InputStream = new InputStream();
out.setFilePath(output.getPath());
input1.setFilePath(input.getPath());
let inputs: CompressorInputStream = new CompressorStreamFactory(false).createCompressorInputStream2("xz", input1)
IOUtils.copy(inputs, out);
out.close();
input1.close();
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/cache_files/hello1.txt',
confirm: { value: 'OK', action: () => {
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### Z 解压功能
指定文件夹路径解压Z文件夹。
```javascript
import {File, OutputStream,InputStream,IOUtils,CompressorInputStream,CompressorStreamFactory} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
unZFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
let inputStream: InputStream = new InputStream();
inputStream.setFilePath(data + '/bla.tar.Z');
let fOut: OutputStream = new OutputStream();
fOut.setFilePath(data + '/bla.tar');
let input:CompressorInputStream = new CompressorStreamFactory(false).createCompressorInputStream2("z", inputStream);
IOUtils.copy(input, fOut);
inputStream.close();
fOut.close();
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/bla.tar',
confirm: { value: 'OK', action: () => {
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### zstd 压缩解压功能
指定文件夹路径压缩解压zstd 文件夹。
```javascript
import {ZstdCompressor, IOUtils,InputStream,OutputStream,File,ZstdDecompressor,System} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
compressedSize: number = 0;
compressed: Int8Array;
original: Int8Array;
//zstd压缩功能
testZstdCompressed(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
console.info('directory obtained. Data:' + data);
let compressor = new ZstdCompressor();
let output = new File(data, "/cache_files/hello.txt.zst");
let input = new File(data, "/cache_files/hello.txt");
let input1 = new InputStream();
let out = new OutputStream();
input1.setFilePath(input.getPath());
out.setFilePath(output.getPath());
this.original = new Int8Array(input1._endPosition)
IOUtils.readFully(input1, this.original);
let maxCompressLength: number = compressor.maxCompressedLength(this.original.length);
this.compressed = new Int8Array(maxCompressLength);
this.compressedSize = compressor.getZstdFrameCompress(this.original, 0, this.original.length, this.compressed, 0, this.compressed.length);
out.writeBytes(this.compressed);
out.close()
input1.close();
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/cache_files/hello.txt.zstd',
confirm: { value: 'OK', action: () => {
this.isDeCompressBzip2Show = true
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
//zstd解压功能
testZstdDecompressed() {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
console.info('directory obtained. Data:' + data);
let time = System.currentTimeMillis()
let compressor = new ZstdDecompressor();
let output = new File(data, "/cache_files/newhello.txt");
let out = new OutputStream();
out.setFilePath(output.getPath());
let decompressed: Int8Array = new Int8Array(this.original.length);
let compressedSize: number = compressor.decompress(this.compressed, 0, this.compressedSize, decompressed, 0, decompressed.length);
out.writeBytes(decompressed)
out.close()
let time1 = System.currentTimeMillis()
console.log('consoleconsoleconsole1: ' + (time1 - time) );
AlertDialog.show({ title: '解压成功',
message: '请查看手机路径 ' + data + '/cache_files/newhello.txt',
confirm: { value: 'OK', action: () => {
this.isDeCompressBzip2Show = true
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### ar 压缩功能
指定文件夹路径压缩ar文件夹。
```javascript
import { ArchiveEntry, ArchiveUtils, ArArchiveInputStream, ArArchiveEntry, ArchiveStreamFactory, ArchiveOutputStream, InputStream, File,OutputStream,IOUtils} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
jsArTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testArArchiveCreation(data)
})
}
testArArchiveCreation(data:string) {
let output: File = new File(data, this.newFolder + '.ar');
let file1: File = new File(data + '/' + this.newFolder, 'test1.xml');
let out: OutputStream = new OutputStream();
let input1: InputStream = new InputStream();
out.setFilePath(output.getPath());
input1.setFilePath(file1.getPath());
let os: ArchiveOutputStream = ArchiveStreamFactory.DEFAULT.createArchiveOutputStream("ar", out, "");
os.putArchiveEntry(new ArArchiveEntry("test1.xml", Long.fromNumber(file1.length()), 0, 0,
ArArchiveEntry.DEFAULT_MODE, Long.fromNumber(new Date().getTime() / 1000)));
IOUtils.copy(input1, os);
os.closeArchiveEntry();
os.close();
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/',
confirm: { value: 'OK', action: () => {
this.isDeCompressGArShow = true
} }
})
}
```
### ar 解压功能
指定文件夹路径解压ar文件夹。
```javascript
import { ArchiveEntry, ArchiveUtils, ArArchiveInputStream, ArArchiveEntry, ArchiveStreamFactory, ArchiveOutputStream, InputStream, File,OutputStream,IOUtils} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
jsUnArTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testReadLongNamesBSD(data)
})
}
testReadLongNamesBSD(data:string): void {
let inFile: File = new File(data + '/' + this.newFolder, "longfile_bsd.ar");
let input: InputStream = new InputStream();
input.setFilePath(inFile.getPath());
let s: ArArchiveInputStream = new ArArchiveInputStream(input);
let tarArchiveEntry: ArchiveEntry = null;
while ((tarArchiveEntry = s.getNextEntry()) != null) {
let name: string = tarArchiveEntry.getName();
let tarFile: File = new File(data + '/' + this.newFolder, name);
if(name.indexOf('/') != -1) {
try {
let splitName:string = name.substring(0, name.lastIndexOf('/'));
fileio.mkdirSync(data + '/' + this.newFolder + '/' + splitName);
} catch (err) {
}
}
let fos: OutputStream = null;
try {
fos = new OutputStream();
fos.setFilePath(tarFile.getPath())
let read: number = -1;
let buffer: Int8Array = new Int8Array(1024);
while ((read = s.readBytes(buffer)) != -1) {
fos.writeBytesOffset(buffer, 0, read);
}
} catch (e) {
throw e;
} finally {
fos.close();
}
}
AlertDialog.show({ title: '解压成功',
message: '请查看手机路径 ' + data + '/' + this.newFolder,
confirm: { value: 'OK', action: () => {
} }
})
}
```
### brotli 解压功能
指定文件夹路径解压brotli文件夹。
```javascript
import { CompressorInputStream,CompressorStreamFactory,ArchiveInputStream,ArchiveStreamFactory,ArchiveEntry,InputStream,File,OutputStream,IOUtils} from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import ability_featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
brotilTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.generateTextFile(data, '/bla.tar.br', compressData)
let input = new File(data,"/bla.tar.br");
let output = new File(data, "/bla.tar");
let out: OutputStream = new OutputStream();
let input1: InputStream = new InputStream();
out.setFilePath(output.getPath());
input1.setFilePath(input.getPath());
let inputs:CompressorInputStream = new CompressorStreamFactory().createCompressorInputStream2("br", input1)
IOUtils.copy(inputs, out);
out.close();
input1.close();
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/bla.tar',
confirm: { value: 'OK', action: () => {
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### bzip2 压缩功能
指定文件夹路径压缩bzip2文件夹。
```javascript
import { CompressorInputStream,CompressorStreamFactory,InputStream,OutputStream,IOUtils,CompressorOutputStream} from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import ability_featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
bzip2FileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
console.info('directory obtained. Data:' + data);
let inputStream: InputStream = new InputStream();
inputStream.setFilePath(data + '/cache_images/hello.txt');
let fOut: OutputStream = new OutputStream();
fOut.setFilePath(data + '/cache_files/hello.txt.bz2');
let cos: CompressorOutputStream = new CompressorStreamFactory(false).createCompressorOutputStream("bzip2", fOut);
IOUtils.copy(inputStream, cos);
cos.close();
inputStream.close();
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/cache_files/hello.txt.gz',
confirm: { value: 'OK', action: () => {
this.isDeCompressBzip2Show = true
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### bzip2 解压功能
指定文件夹路径解压bzip2文件夹。
```javascript
import { CompressorInputStream,CompressorStreamFactory,InputStream,OutputStream,IOUtils,CompressorOutputStream} from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
unBzip2FileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
let inputStream: InputStream = new InputStream();
inputStream.setFilePath(data + '/cache_files/hello.txt.bz2');
let fOut: OutputStream = new OutputStream();
fOut.setFilePath(data + '/cache_files/hello.txt');
let input:CompressorInputStream = new CompressorStreamFactory(false).createCompressorInputStream2("bzip2", inputStream);
IOUtils.copy(input, fOut);
inputStream.close();
fOut.close();
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/cache_files/hello.txt',
confirm: { value: 'OK', action: () => {
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### lz4 压缩功能
指定文件夹路径压缩lz4文件夹。
``` javascript
import {lz4Compressed} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
lz4CompressedTest(): void {
var context = ability_featureAbility.getContext();
context.getFilesDir()
.then((data) => {
lz4Compressed(data + '/cache_images/test.txt', data + '/cache_files/test.txt.lz4')
AlertDialog.show({ title: '压缩成功',
message: '请查看手机路径 ' + data + '/cache_files/test.txt.lz4',
confirm: { value: 'OK', action: () => {
this.isDeCompressLz4Show = true
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### lz4 解压功能
指定文件夹路径解压lz4文件夹。
``` javascript
import {lz4Decompressed} from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
lz4DecompressedTest(): void {
var context = ability_featureAbility.getContext();
context.getFilesDir()
.then((data) => {
lz4Decompressed(data + '/cache_files/test.txt.lz4', data + '/test.txt')
AlertDialog.show({ title: '解缩成功',
message: '请查看手机路径 ' + data + '/test.txt',
confirm: { value: 'OK', action: () => {
} }
})
})
.catch((error) => {
console.error('File to obtain the file directory. Cause: ' + error.message);
})
}
```
### lzma,sevenz7 压缩功能
指定文件夹路径压缩lzma,sevenz7文件夹。
``` javascript
import {Decoder, Encoder,InputStream,OutputStream,Exception,System } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
encoder(path) {
let inputStream: InputStream = new InputStream();
let outputStream: OutputStream = new OutputStream();
outputStream.setFilePath(path + '/test.xml.lzma')
//outputStream.setFilePath(path + '/test.xml.7z')
inputStream.setFilePath(path + '/test.xml')
let stat = fileio.statSync(path + '/test.xml');
let encoder: Encoder = new Encoder();
if (!encoder.SetAlgorithm(2))
return
if (!encoder.SetDictionarySize(1 << 23))
return
if (!encoder.SetNumFastBytes(128))
return
if (!encoder.SetMatchFinder(1))
return
if (!encoder.SetLcLpPb(3, 0, 2))
return
encoder.SetEndMarkerMode(false);
encoder.WriteCoderProperties(outputStream);
let fileSize: Long = Long.fromNumber(stat.size);
for (let i = 0; i < 8; i++) {
outputStream.write(fileSize.shiftRightUnsigned(8 * i).toInt() & 0xFF);
}
encoder.Code(inputStream, outputStream, Long.fromNumber(-1), Long.fromNumber(-1), null);
outputStream.flush();
outputStream.close();
inputStream.close();
console.info(this.TAG+'结束')
}
```
### lzma,sevenz7 解压功能
指定文件夹路径解压lzma,sevenz7文件夹。
``` javascript
import {Decoder, Encoder,InputStream,OutputStream,Exception,System } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
decoder(path) {
let decoder: Decoder = new Decoder();
let inputStream: InputStream = new InputStream();
inputStream.setFilePath(path + '/test.xml.lzma')
//inputStream.setFilePath(path + '/test.xml.7z')
let outputStream: OutputStream = new OutputStream();
outputStream.setFilePath(path + '/cache_files/test.xml')
let propertiesSize = 5;
let properties: Int8Array = new Int8Array(propertiesSize);
if (inputStream.readBytesOffset(properties, 0, propertiesSize) != propertiesSize)
throw new Exception("input .lzma file is too short");
if (!decoder.SetDecoderProperties(properties))
throw new Exception("Incorrect stream properties");
let outSize: Long = Long.fromNumber(0);
for (let i = 0; i < 8; i++) {
let v: number = inputStream.read();
if (v < 0)
throw new Exception("Can't read stream size");
outSize = outSize.or(Long.fromNumber(v).shiftLeft(8 * i));
}
if (!decoder.Code(inputStream, outputStream, outSize))
throw new Exception("Error in data stream");
outputStream.flush();
outputStream.close();
inputStream.close();
}
```
### tar 压缩功能
指定文件夹路径解压tar文件夹。
``` javascript
import { File, InputStream, OutputStream, ArchiveStreamFactory, TarArchiveEntry, IOUtils } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
jsTarTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testArArchiveCreation(data);
})
}
testArArchiveCreation(data:string) {
let output: File = new File(data, this.newFolder + '.tar');
let file1: File = new File(data + '/' + this.newFolder, 'test1.xml');
let input1: InputStream = new InputStream();
input1.setFilePath(file1.getPath());
let out: OutputStream = new OutputStream();
out.setFilePath(output.getPath());
let os: ArchiveOutputStream = ArchiveStreamFactory.DEFAULT.createArchiveOutputStreamLittle("tar", out);
let entry: TarArchiveEntry = new TarArchiveEntry();
entry.tarArchiveEntryPreserveAbsolutePath2("testdata/test1.xml", false);
entry.setModTime(Long.fromNumber(0));
entry.setSize(Long.fromNumber(file1.length()));
entry.setUserId(0);
entry.setGroupId(0);
entry.setUserName("avalon");
entry.setGroupName("excalibur");
entry.setMode(0o100000);
os.putArchiveEntry(entry);
IOUtils.copy(input1, os);
os.closeArchiveEntry();
os.close();
}
```
### tar 解压功能
指定文件夹路径解压tar文件夹。
``` javascript
import { File, InputStream, OutputStream, TarArchiveInputStream, TarConstants, TarArchiveEntry } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
jsUnTarTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testUnCompressTar(data);
})
}
testUnCompressTar(data:string) {
let input: File = new File(data, this.newFolder + '.tar');
let input1: InputStream = new InputStream();
input1.setFilePath(input.getPath());
let tais: TarArchiveInputStream = new TarArchiveInputStream(input1, TarConstants.DEFAULT_BLKSIZE,
TarConstants.DEFAULT_RCDSIZE, null, false);
let tarArchiveEntry: TarArchiveEntry = null;
while ((tarArchiveEntry = tais.getNextTarEntry()) != null) {
let name: string = tarArchiveEntry.getName();
let tarFile: File = new File(data + '/' + this.newFolder, name);
if(name.indexOf('/') != -1) {
try {
let splitName:string = name.substring(0, name.lastIndexOf('/'));
fileio.mkdirSync(data + '/' + this.newFolder + '/' + splitName);
} catch (err) {
}
}
let fos: OutputStream = null;
try {
fos = new OutputStream();
fos.setFilePath(tarFile.getPath())
let read: number = -1;
let buffer: Int8Array = new Int8Array(1024);
while ((read = tais.readBytes(buffer)) != -1) {
fos.writeBytesOffset(buffer, 0, read);
}
} catch (e) {
throw e;
} finally {
fos.close();
}
}
}
```
### snappy 压缩功能
指定文件夹路径解压sz文件夹。
``` javascript
import { snappyCompress } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
@State newfolder: string = 'newfolder'
@State newfile: string = 'bla.txt'
@State newfile1: string = 'bla1.txt'
snappyJsTest(value) {
var context = ability_featureAbility.getContext();
context.getFilesDir()
.then((data) => {
let path = data + '/' + this.newfolder
snappyCompress(path, this.newfile)
})
}
```
### snappy 解压功能
指定文件夹路径解压sz文件夹。
``` javascript
import { snappyUncompress } from '@ohos/commons-compress'
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
@State newfolder: string = 'newfolder'
@State newfile: string = 'bla.txt'
@State newfile1: string = 'bla1.txt'
snappyJsTest() {
var context = ability_featureAbility.getContext();
context.getFilesDir()
.then((data) => {
snappyUncompress(data, this.newfolder, this.newfile, this.newfile1)
})
}
```
### dump 解压功能
指定文件夹路径解压dump文件夹。
``` javascript
import { File, InputStream, OutputStream, ArchiveStreamFactory, ArchiveInputStream, ArchiveEntry, IOUtils } from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import ability_featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
jsDumpTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testDumpUnarchiveAll(data,'dump/bla.dump')
})
}
testDumpUnarchiveAll(data:string ,archive: string):void {
let file1: File = new File(data, archive);
let input1: InputStream = new InputStream();
input1.setFilePath(file1.getPath());
let input2: ArchiveInputStream = null;
input2 = ArchiveStreamFactory.DEFAULT.createArchiveInputStream("dump", input1, null);
let entry: ArchiveEntry = input2.getNextEntry();
while (entry != null) {
let out: OutputStream = new OutputStream();
let name: string = entry.getName().toString();
let archiveEntry:File = new File(data, name);
archiveEntry.getParentFile().getPath();
if (entry.isDirectory()) {
let splitName:string = name.substring(0, name.lastIndexOf('/'));
try {
fileio.mkdirSync(data + '/' + splitName);
}catch(e) {
console.log(e);
}
entry = input2.getNextEntry();
continue;
}
let output: File = new File(data, name);
out.setFilePath(output.getPath());
IOUtils.copy(input2, out);
out.close();
out = null;
entry = input2.getNextEntry();
}
if (input2 != null) {
input2.close();
}
input1.close();
}
```
### deflate 压缩功能
指定文件夹路径压缩deflate文件夹。
``` javascript
import { DeflateFile } from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
DeflateFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
DeflateFile(data + '/hello.txt', data + '/hello.txt.deflate')
})
}
```
### deflate 解压功能
指定文件夹路径解压deflate文件夹。
``` javascript
import { InflateFile } from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
InflateFileTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
InflateFile(data + "/hello.txt.deflate",data + '/test.txt')
})
}
```
### cpio 压缩功能
指定文件夹路径压缩cpio文件夹。
``` javascript
import {File, InputStream, OutputStream, ArchiveStreamFactory, ArchiveOutputStream, CpioArchiveEntry, IOUtils } from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
jsCpioTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testReadLongNamesBSD(data)
})
}
testReadLongNamesBSD(data: string): void {
let output: File = new File(data, this.newFolder + ".cpio");
let file1: File = new File(data + '/' + this.newFolder, "test1.xml");
let inputStream1 = new InputStream();
inputStream1.setFilePath(file1.getPath());
let out: OutputStream = new OutputStream();
out.setFilePath(output.getPath());
let os: ArchiveOutputStream = ArchiveStreamFactory.DEFAULT.createArchiveOutputStreamLittle("cpio", out);
let archiveEntry1: CpioArchiveEntry = new CpioArchiveEntry();
archiveEntry1.initCpioArchiveEntryNameSize("test1.xml", Long.fromNumber(file1.length()));
os.putArchiveEntry(archiveEntry1);
IOUtils.copy(inputStream1, os);
os.closeArchiveEntry();
os.close();
out.close();
}
```
### cpio 解压功能
指定文件夹路径解压cpio文件夹。
``` javascript
import {File, InputStream, OutputStream, CpioArchiveInputStream, CpioArchiveEntry, CpioConstants } from '@ohos/commons-compress'
import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';
jsUnCpioTest(): void {
var context = featureAbility.getContext();
context.getFilesDir()
.then((data) => {
this.testUnCompressCpio(data)
})
}
testUnCompressCpio(data:string) {
let input: File = new File(data, this.newFolder + '.cpio');
let input1: InputStream = new InputStream();
input1.setFilePath(input.getPath());
let tais = new CpioArchiveInputStream(input1, CpioConstants.BLOCK_SIZE, CharacterSetECI.ASCII.getName());
let cpioArchiveEntry: CpioArchiveEntry = null;
while ((cpioArchiveEntry = tais.getNextCPIOEntry()) != null) {
let name: string = cpioArchiveEntry.getName();
let tarFile: File = new File(data + '/' + this.newFolder, name);
if (name.indexOf('/') != -1) {
try {
let splitName: string = name.substring(0, name.lastIndexOf('/'));
fileio.mkdirSync(data + '/' + this.newFolder + '/' + splitName);
} catch (err) {
}
}
let fos: OutputStream = null;
try {
fos = new OutputStream();
fos.setFilePath(tarFile.getPath())
let read: number = -1;
let buffer: Int8Array = new Int8Array(1024);
while ((read = tais.readBytes(buffer)) != -1) {
fos.writeBytesOffset(buffer, 0, read);
}
} catch (e) {
throw e;
} finally {
fos.close();
}
}
}
```
## 目录
```
/commons-compress # 三方库源代码
├── src # 框架代码
│ └── main
│ └── MainAbility
│ └── archivers
│ ├── ar # ar源代码存放目录
│ ├── cpio # cpio源代码存放目录
│ ├── dump # dump源代码存放目录
│ ├── lzma # lzma源代码存放目录
│ ├── tar # tar源代码存放目录
│ └── zip # zip源代码存放目录
│ └── compressors
│ ├── brotli # brotli源代码存放目录
│ ├── bzip2 # bzip2源代码存放目录
│ ├── lz77support # lz77support源代码存放目录
│ ├── lzw # lzw源代码存放目录
│ ├── snappy # snappy源代码存放目录
│ └── xz # xz源代码存放目录
│ └── z # z源代码存放目录
│ └── deflate # deflate源代码存放目录
│ └── gzip # gzip源代码存放目录
│ └── lz4 # lz4源代码存放目录
│ └── util # 工具源代码存放目录
│ └── zip # zip源代码存放目录
│ └── zstd # zstd源代码存放目录0
```
## 接口说明
| **接口** | 参数 | 功能 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------- |
| createArchiveOutputStream(archiverName: string, out: OutputStream) | archiverName:存档名称
out:存档输出流 | 创建存档输出流。 |
| zipCompress(path: string, dest: string) | path:文件路径
dest:生成后的文件名称 | zip压缩方法。 |
| zipDeCompress(path: string, target?: string) | path:解压后的文件路径和名称
target:解压后的路径 | zip解压方法。 |
| gzipFile(src: string, dest: string) | src:文件路径
dest:生成后的文件名称 | gzip压缩方法。 |
| unGzipFile(src: string, target: string) | path:解压后的文件路径和名称
target:解压后的路径 | gzip解压方法。 |
| createCompressorOutputStream(name: string, out: OutputStream) | name:压缩器名称
out:输出流 | 从存档程序名称和输出流创建存档输出流。 |
| createCompressorInputStream( name: string, inputStream: InputStream, actualDecompressConcatenated: boolean) | name:压缩器名称
inputStream:输入流
actualDecompressConcatenated:解压级 | 从存档程序名称和输入流创建存档输入流。 |
| copy(input: InputStream, output: OutputStream) | input:输入流
output:输出流 | 将输入流的内容复制到输出流中。 |
| setFilePath(path: string) | path:指定路径 | 打开指定文件路径。 |
| createCompressorInputStream2(name: string, inputStream: InputStream) | name:压缩器名称
inputStream:输入流 | 从压缩器名称和输入创建压缩器输入流。 |
| readFully(input: InputStream, array: Int8Array) | input:输入流
array:需要填充数组 | 从输入中读取尽可能多的信息,以填充给定的数组。 |
| maxCompressedLength(uncompressedSize: number) | uncompressedSize:解压的大小 | 读取压缩长度 |
| getZstdFrameCompress(input: Int8Array, inputOffset: number, inputLength: number, output: Int8Array, outputOffset: number, maxOutputLength: number) | input:输入流
inputOffset:输入偏移量
inputLength:输入长度
output:输出流
outputOffset:输出偏移量
maxOutputLength:最大输出长度 | 获取压缩数据流。 |
| decompress(input: Int8Array, inputOffset: number, inputLength: number, output: Int8Array, outputOffset: number, maxOutputLength: number) | input:输入流
inputOffset:输入偏移量
inputLength:输入长度
output:输出流
outputOffset:输出偏移量
maxOutputLength:最大输出长度 | 获取解压数据流。 |
| lz4Compressed(src: string, dest: string) | src:文件路径
dest:生成后的文件名称 | 压缩为lz4文件。 |
| lz4Decompressed(src: string, target: string) | path:解压后的文件路径和名称
target:解压后的路径 | 解压lz4文件。 |
| createArchiveOutputStreamLittle(archiverName: string, out: OutputStream) | archiverName:存档名称
out:输出流 | 创建存档输出流。 |
| createArchiveInputStream( archiverName: string, inputStream: InputStream, actualEncoding: string) | archiverName:存档名称
inputStream:输入流
actualEncoding:条目编码 | 从存档程序名称和输入流创建存档输入流。 |
| snappyCompress(path, newfile) | path:文件路径
newfile:生成后的文件名称 | 压缩为sz文件。 |
| snappyUncompress(path, newfolder, newfile, newfile1) | path:文件路径
newfolder: 文件名称
newfile:生成后的文件名称
newfile1:文件名称 | 解压sz文件。 |
| DeflateFile(src: string, dest: string) | src:文件路径
dest:生成后的文件名称 | 压缩为deflate文件。 |
| InflateFile(src: string, target: string) | src:解压后的文件路径和名称
target:解压后的路径 | 解压deflate文件。 |
## 兼容性
支持 OpenHarmony API version 8 及以上版本。
## 开源协议
本项目基于 [Apache License 2.0](https://gitee.com/openharmony-tpc/CommonsCompressEts/blob/master/LICENSE) ,请自由地享受和参与开源。
## 贡献代码
使用过程中发现任何问题都可以提 [Issue](https://gitee.com/openharmony-tpc/CommonsCompressEts/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://gitee.com/openharmony-tpc/CommonsCompressEts/pulls) 。