dart 如何在Flutter中将tar.gz文件拆分为多个文件?

gcxthw6b  于 2024-01-04  发布在  Flutter
关注(0)|答案(2)|浏览(218)

我有这个命令split -b 1800k file_name.tar.gz,但不知道如何在Dart或Flutter中使用它。
我有一个tar.gz文件,我想把它分成多个JSON格式的文件。这在Dart中可能吗?
例如,一个原始文件:file_name.tar.gz
拆分后:file_name_1.json, file_name_2.json, file_name_3.json, file_name_4.json, file_name_5.json

qvsjd97n

qvsjd97n1#

我有办法
我做了下面的函数将文件分割成多个部分。

  1. Future<List<File>> splitFileInSegment(File file,
  2. {int chunkSize = 1800,
  3. required String cachePath,
  4. required String fileName}) async {
  5. int sizeOfFile = chunkSize * 1024;
  6. ByteData bd = await rootBundle.load(file.path);
  7. List<int> bytes = bd.buffer.asUint8List();
  8. List<List<int>> splitBytes = [];
  9. int isHalfFileNeeded = bytes.length % sizeOfFile;
  10. int numberOfFiles = bytes.length ~/ sizeOfFile;
  11. if (isHalfFileNeeded > 0) {
  12. numberOfFiles = numberOfFiles + 1;
  13. }
  14. int offset = 0;
  15. for (int i = 0; i < numberOfFiles; i++) {
  16. int getLastIndex = 0;
  17. int bytesReached = (i + 1) * sizeOfFile;
  18. if (bytesReached <= bytes.length) {
  19. getLastIndex = bytesReached;
  20. } else {
  21. getLastIndex = offset + isHalfFileNeeded;
  22. }
  23. List<int> byteList = bytes.sublist(offset, getLastIndex);
  24. splitBytes.add(byteList);
  25. offset += sizeOfFile;
  26. }
  27. List<File> files = [];
  28. for (int index = 0; index < splitBytes.length; index++) {
  29. final File tempFile = File("$cachePath/$fileName" + "_" + "$index.json");
  30. File file = await tempFile.writeAsBytes(splitBytes[index]);
  31. files.add(file);
  32. }
  33. return files;
  34. }

字符集

展开查看全部
zxlwwiss

zxlwwiss2#

  1. import 'dart:io';
  2. void main() {
  3. File originalFile = File('file_name.tar.gz');
  4. List<int> bytes = originalFile.readAsBytesSync();
  5. int chunkSize = 1800 * 1024; // 1800 KB
  6. int numOfFiles = (bytes.length / chunkSize).ceil();
  7. for (int i = 0; i < numOfFiles; i++) {
  8. int start = i * chunkSize;
  9. int end = (i + 1) * chunkSize;
  10. if (end > bytes.length) {
  11. end = bytes.length;
  12. }
  13. List<int> chunk = bytes.sublist(start, end);
  14. File newFile = File('file_name_${i + 1}.json');
  15. newFile.writeAsBytesSync(chunk);
  16. }
  17. print('File split into $numOfFiles JSON files.');
  18. }

字符集

展开查看全部

相关问题