我有这个命令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
split -b 1800k file_name.tar.gz
file_name.tar.gz
file_name_1.json, file_name_2.json, file_name_3.json, file_name_4.json, file_name_5.json
qvsjd97n1#
我有办法我做了下面的函数将文件分割成多个部分。
Future<List<File>> splitFileInSegment(File file, {int chunkSize = 1800, required String cachePath, required String fileName}) async { int sizeOfFile = chunkSize * 1024; ByteData bd = await rootBundle.load(file.path); List<int> bytes = bd.buffer.asUint8List(); List<List<int>> splitBytes = []; int isHalfFileNeeded = bytes.length % sizeOfFile; int numberOfFiles = bytes.length ~/ sizeOfFile; if (isHalfFileNeeded > 0) { numberOfFiles = numberOfFiles + 1; } int offset = 0; for (int i = 0; i < numberOfFiles; i++) { int getLastIndex = 0; int bytesReached = (i + 1) * sizeOfFile; if (bytesReached <= bytes.length) { getLastIndex = bytesReached; } else { getLastIndex = offset + isHalfFileNeeded; } List<int> byteList = bytes.sublist(offset, getLastIndex); splitBytes.add(byteList); offset += sizeOfFile; } List<File> files = []; for (int index = 0; index < splitBytes.length; index++) { final File tempFile = File("$cachePath/$fileName" + "_" + "$index.json"); File file = await tempFile.writeAsBytes(splitBytes[index]); files.add(file); } return files; }
Future<List<File>> splitFileInSegment(File file,
{int chunkSize = 1800,
required String cachePath,
required String fileName}) async {
int sizeOfFile = chunkSize * 1024;
ByteData bd = await rootBundle.load(file.path);
List<int> bytes = bd.buffer.asUint8List();
List<List<int>> splitBytes = [];
int isHalfFileNeeded = bytes.length % sizeOfFile;
int numberOfFiles = bytes.length ~/ sizeOfFile;
if (isHalfFileNeeded > 0) {
numberOfFiles = numberOfFiles + 1;
}
int offset = 0;
for (int i = 0; i < numberOfFiles; i++) {
int getLastIndex = 0;
int bytesReached = (i + 1) * sizeOfFile;
if (bytesReached <= bytes.length) {
getLastIndex = bytesReached;
} else {
getLastIndex = offset + isHalfFileNeeded;
List<int> byteList = bytes.sublist(offset, getLastIndex);
splitBytes.add(byteList);
offset += sizeOfFile;
List<File> files = [];
for (int index = 0; index < splitBytes.length; index++) {
final File tempFile = File("$cachePath/$fileName" + "_" + "$index.json");
File file = await tempFile.writeAsBytes(splitBytes[index]);
files.add(file);
return files;
字符集
zxlwwiss2#
import 'dart:io';void main() { File originalFile = File('file_name.tar.gz'); List<int> bytes = originalFile.readAsBytesSync(); int chunkSize = 1800 * 1024; // 1800 KB int numOfFiles = (bytes.length / chunkSize).ceil(); for (int i = 0; i < numOfFiles; i++) { int start = i * chunkSize; int end = (i + 1) * chunkSize; if (end > bytes.length) { end = bytes.length; } List<int> chunk = bytes.sublist(start, end); File newFile = File('file_name_${i + 1}.json'); newFile.writeAsBytesSync(chunk); } print('File split into $numOfFiles JSON files.');}
import 'dart:io';
void main() {
File originalFile = File('file_name.tar.gz');
List<int> bytes = originalFile.readAsBytesSync();
int chunkSize = 1800 * 1024; // 1800 KB
int numOfFiles = (bytes.length / chunkSize).ceil();
for (int i = 0; i < numOfFiles; i++) {
int start = i * chunkSize;
int end = (i + 1) * chunkSize;
if (end > bytes.length) {
end = bytes.length;
List<int> chunk = bytes.sublist(start, end);
File newFile = File('file_name_${i + 1}.json');
newFile.writeAsBytesSync(chunk);
print('File split into $numOfFiles JSON files.');
2条答案
按热度按时间qvsjd97n1#
我有办法
我做了下面的函数将文件分割成多个部分。
字符集
zxlwwiss2#
字符集