zip_util.dart
1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import 'dart:io';
import 'package:archive/archive.dart';
import 'package:flutter/services.dart';
class ZipUtil {
static Future<bool> extractZipFile(String zipFilePath, String extractPath) async {
try {
// 读取zip文件
Uint8List bytes;
if (zipFilePath.startsWith('assets/')) {
// 读取 assets 中的文件
final ByteData data = await rootBundle.load(zipFilePath);
bytes = data.buffer.asUint8List();
} else {
// 读取本地文件
final zipFile = File(zipFilePath);
bytes = await zipFile.readAsBytes();
}
// 解压ZIP文件
final archive = ZipDecoder().decodeBytes(bytes);
// 创建解压目录
final directory = Directory(extractPath);
if (!(await directory.exists())) {
await directory.create(recursive: true);
}
// 遍历并提取文件
for (final file in archive) {
final filename = file.name;
if (file.isFile) {
final data = file.content as List<int>;
final outputFile = File('$extractPath/$filename');
// 创建父目录
await outputFile.create(recursive: true);
// 写入文件内容
await outputFile.writeAsBytes(data);
} else {
// 创建目录
final dir = Directory('$extractPath/$filename');
await dir.create(recursive: true);
}
}
print('文件解压成功: $extractPath');
return true;
} catch (e) {
print('文件解压失败: $e');
return false;
}
}
}