[flutter] 플러터에서 path_provider를 이용하여 압축 파일 해제하기

안녕하세요! 이번 글에서는 플러터에서 path_provider 패키지를 이용하여 압축 파일을 해제하는 방법에 대해 알아보겠습니다.

path_provider 패키지는 플러터 앱에서 파일 시스템 경로를 얻을 수 있는 유용한 도구입니다. 우리는 이 패키지를 사용하여 앱 내부의 디렉토리에 위치한 압축 파일을 해제할 것입니다.

1. path_provider 패키지 추가하기

먼저, pubspec.yaml 파일에 path_provider 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.1.0

위의 예시에서는 path_provider 패키지의 버전을 2.1.0으로 지정했습니다. 적절한 버전을 선택하여 사용하시면 됩니다.

2. 압축 파일 해제하기

이제 압축 파일을 해제하는 코드를 작성해보겠습니다.

import 'package:flutter/material.dart';
import 'package:archive/archive.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'File Extraction',
      home: Scaffold(
        appBar: AppBar(
          title: Text('File Extraction'),
        ),
        body: Center(
          child: ElevatedButton(
            child: Text('Extract'),
            onPressed: () async {
              await extractFile();
            },
          ),
        ),
      ),
    );
  }

  Future<void> extractFile() async {
    Directory appDir = await getApplicationDocumentsDirectory();
    File file = File('${appDir.path}/archive.zip');

    if (await file.exists()) {
      List<int> bytes = await file.readAsBytes();
      Archive archive = ZipDecoder().decodeBytes(bytes);
      for (ArchiveFile file in archive) {
        String filename = '${appDir.path}/${file.name}';
        if (file.isFile) {
          List<int> data = file.content as List<int>;
          File(filename)
            ..createSync(recursive: true)
            ..writeAsBytesSync(data);
        } else {
          Directory(filename).create(recursive: true);
        }
      }
      print('Extraction complete.');
    } else {
      print('Archive file does not exist.');
    }
  }
}

위의 코드에서는 extractFile() 함수를 통해 압축 파일을 해제합니다. 앱의 내부 디렉토리를 얻기 위해 getApplicationDocumentsDirectory() 함수를 호출하고, 해당 경로에 archive.zip 파일이 있는지 확인합니다.

만약 파일이 존재한다면, readAsBytes() 함수를 통해 파일의 바이트 데이터를 읽어온 뒤 ZipDecoder().decodeBytes() 함수를 사용하여 압축을 해제합니다. 해제된 파일은 archive 변수에 들어있습니다.

해제된 각 파일을 확인하여 파일이면 해당 경로에 생성하고 바이트 데이터를 쓰고, 디렉토리면 해당 경로에 디렉토리를 생성합니다.

모든 작업이 완료되면, print()을 통해 “Extraction complete.” 메시지를 출력합니다. 만약 압축 파일이 존재하지 않는다면 “Archive file does not exist.” 메시지가 출력됩니다.

마치며

이번 글에서는 플러터에서 path_provider 패키지를 이용하여 압축 파일을 해제하는 방법에 대해 알아보았습니다. path_provider 패키지를 이용하면 앱 내부의 파일 시스템 경로에 쉽게 접근할 수 있으므로 파일 관련 작업을 보다 효율적이고 간편하게 처리할 수 있습니다.

더 자세한 정보를 원하신다면, path_provider 패키지 공식 문서를 참고해 주세요.

감사합니다!