パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v4.6.0

archive

zip、tar、bzip2、gzip、zlib などのさまざまなアーカイブおよび圧縮形式用のエンコーダーとデコーダーを提供します。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
1980万
いいね数
909
Pub ポイント
150

パッケージをインストール

flutter pub add archive

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

アーカイブパッケージは、ZIP、TAR、BZIP2、GZIP、ZLIBなど、複数のアーカイブおよび圧縮形式に対応する効率的なエンコーダーとデコーダーを提供します。Flutterアプリケーションが、Android、iOS、Web、macOS、Windows、Linuxといった主要プラットフォーム上で、圧縮ファイルの読み取り、書き込み、操作を可能にします。ファイルバンドルやバックアップ、サイズを小さくしたデータ送信に最適で、ストリーミングおよびメモリ内操作をサポートしています。このパッケージは軽量で、ドキュメントも充実しており、pub.dev経由でFlutterプロジェクトにスムーズに統合できます。

用途

  • ZIPファイルの抽出および作成の処理
  • ストレージ用にアプリデータを圧縮する
  • ストリーミング圧縮ファイル処理
  • クロスプラットフォームアーカイブ操作
  • バックアップと復元機能

主な機能

  • ZIP、TAR、GZIP、BZIP2、ZLIB をサポート
  • クロスプラットフォーム互換性
  • ストリームベースおよびメモリ内での操作
  • 軽量で高速なパフォーマンス
  • エンコードおよびデコードのためのシンプルな API

適している対象

  • ファイル圧縮ユーティリティが必要な開発者
  • 複数のプラットフォームでアーカイブ処理を必要とするアプリ
  • データのパッケージングと転送シナリオ
  • オフラインデータストレージの最適化

注意事項

  • 標準圧縮形式に限定
  • アーカイブ管理用の組み込みGUIはありません
  • 大きなファイルではメモリの取り扱いに注意が必要です
  • 大規模アーカイブのリアルタイムストリーミングには対応していません

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

archive

Dart CI pub package

4.0 Update

The Archive library was originally written when the web was the primary use of Dart. File IO was less of a concern and the design was around having everything in memory. As other uses of Dart came about, such as Flutter, a lot of File IO operations were added to the library, but not in a very clean way.

The design goal for the 4.0 revision of the library is to ensure File IO is a primary focus, while minimizing memory usage. Memory-only interfaces are still available for web platforms.

Migrating 3.x to 4.x.
Migration quick tips:
  • decodeBuffer has been renamed to decodeStream in the various decoder classes.
  • InputStream has been renamed to InputMemoryStream.
  • OutputStream has been renamed to OutputMemoryStream.

Overview

A Dart library to encode and decode various archive and compression formats.

The archive library currently supports the following codecs:

  • Zip
  • Tar
  • ZLib
  • GZip
  • BZip2
  • XZ

Usage

package:archive/archive.dart

  • Can be used for both web and native applications.

package:archive/archive_io.dart

  • Provides some extra utilities for 'dart:io' based applications.
Decoding a zip file in memory
import 'package:archive/archive.dart';
import 'dart:io';
void main() {
  final bytes = File('test.zip').readAsBytesSync();
  final archive = ZipDecoder().decodeBytes(bytes);
  for (final entry in archive) {
    if (entry.isFile) {
      final fileBytes = file.readBytes();
      File('out/${file.fullPathName}')
        ..createSync(recursive: true)
        ..writeAsBytesSync(fileBytes);
    }
  }
}
Using InputFileStream and OutputFileStream to extract a zip:
import 'dart:io';
import 'package:archive/archive.dart';
void main() {
  // Use an InputFileStream to access the zip file without storing it in memory.
  // Note that using InputFileStream will result in an error from the web platform  
  // as there is no file system there.
  final inputStream = InputFileStream('test.zip');
  // Decode the zip from the InputFileStream. The archive will have the contents of the
  // zip, without having stored the data in memory. 
  final archive = ZipDecoder().decodeStream(inputStream);
  final symbolicLinks = []; // keep a list of the symbolic link entities, if any.
  // For all of the entries in the archive
  for (final file in archive) {
    // You should create symbolic links **after** the rest of the archive has been
    // extracted, otherwise the file being linked might not exist yet.
    if (file.isSymbolicLink) {
      symbolicLinks.add(file);
      continue;
    }
    if (file.isFile) {
      // Write the file content to a directory called 'out'.
      // In practice, you should make sure file.name doesn't include '..' paths
      // that would put it outside of the extraction directory.
      // An OutputFileStream will write the data to disk.
      final outputStream = OutputFileStream('out/${file.name}');
      // The writeContent method will decompress the file content directly to disk without
      // storing the decompressed data in memory. 
      entity.writeContent(outputStream);
      // Make sure to close the output stream so the File is closed.
      outputStream.closeSync();
    } else {
      // If the entity is a directory, create it. Normally writing a file will create
      // the directories necessary, but sometimes an archive will have an empty directory
      // with no files.
      Directory('out/${file.name}').createSync(recursive: true);
    }
  }
  // Create symbolic links **after** the rest of the archive has been extracted to make sure
  // the file being linked exists.
  for (final entity in symbolicLinks) {
    // Before using this in production code, you should ensure the symbolicLink path
    // points to a file within the archive, otherwise it could be a security issue.
    final link = Link('out/${entity.fullPathName}');
    link.createSync(entity.symbolicLink!, recursive: true);
  }
}
extractFileToDisk

extractFileToDisk is a convenience function to extract the contents of an archive file directory to an output directory. The type of archive it is will be determined by the file extension.

import 'package:archive/archive_io.dart';
// ...
extractFileToDisk('test.zip', 'out');
extractArchiveToDisk

extractArchiveToDisk is a convenience function to write the contents of an Archive to an output directory.

import 'package:archive/archive_io.dart';
// ...
// Use an InputFileStream to access the zip file without storing it in memory.
final inputStream = InputFileStream('test.zip');
// Decode the zip from the InputFileStream. The archive will have the contents of the
// zip, without having stored the data in memory. 
final archive = ZipDecoder().decodeStream(inputStream);
extractArchiveToDisk(archive, 'out');

カテゴリー

依存関係

依存関係一覧 2 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

ランキング