[flutter] 플러터에서 앱 문서 디렉토리에 파일 저장하기

앱 개발 중에는 종종 사용자의 데이터를 파일로 저장해야 할 때가 있습니다. 이러한 파일을 저장할 수 있는 디렉토리 중 하나는 앱 문서 디렉토리입니다. 이 디렉토리는 앱의 중요한 데이터와 설정 파일을 저장하는 데 사용될 수 있습니다.

플러터에서는 path_provider 패키지를 사용하여 앱 문서 디렉토리 경로를 얻고 파일을 저장할 수 있습니다. 이 패키지는 앱이 실행 중인 플랫폼에 따라 올바른 디렉토리 경로를 제공합니다.

이제 코드로 앱 문서 디렉토리에 파일을 저장하는 방법을 알아보겠습니다.

1. path_provider 패키지 추가하기

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

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.0.2

그리고 터미널에서 flutter pub get 명령어를 실행하여 패키지를 가져옵니다.

2. 앱 문서 디렉토리 경로 가져오기

path_provider 패키지를 사용하여 앱 문서 디렉토리 경로를 가져올 수 있습니다. 다음과 같이 코드를 작성해주세요.

import 'package:path_provider/path_provider.dart';

Future<String> getAppDocumentsDirectoryPath() async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

위의 함수는 getApplicationDocumentsDirectory()를 이용해서 앱 문서 디렉토리를 가져온 후 해당 디렉토리의 경로를 반환합니다.

3. 파일 생성 및 저장하기

이제 앱 문서 디렉토리에 파일을 생성하고 저장할 수 있습니다. 아래의 코드를 이용하여 파일을 생성하고 내용을 저장해주세요.

import 'dart:io';

void saveFileToAppDocumentsDirectory(String fileName, String content) async {
  final directoryPath = await getAppDocumentsDirectoryPath();
  final file = File('$directoryPath/$fileName');
  await file.writeAsString(content);
}

위의 함수는 getAppDocumentsDirectoryPath() 함수를 통해 앱 문서 디렉토리 경로를 얻은 후, 해당 디렉토리 경로에 파일을 생성하고 내용을 저장합니다.

4. 파일 저장하기 예제

위의 코드를 이용하여 실제로 파일을 저장하는 예제를 제공합니다.

void saveExampleFile() {
  final fileName = 'example.txt';
  final fileContent = 'This is an example file content.';
  
  saveFileToAppDocumentsDirectory(fileName, fileContent)
    .then((value) => print('File saved successfully'))
    .catchError((error) => print('Failed to save file: $error'));
}

위의 예제는 ‘example.txt’라는 파일을 생성하고 내용으로 ‘This is an example file content.’를 저장합니다. 파일 저장이 성공하면 ‘File saved successfully’를 출력하고, 실패하면 ‘Failed to save file: [에러 메시지]’를 출력합니다.


플러터에서 앱 문서 디렉토리에 파일을 저장하는 방법에 대해 알아보았습니다. path_provider 패키지를 사용하여 앱 문서 디렉토리 경로를 가져오고, 파일을 생성하고 내용을 저장하는 방법을 살펴보았습니다. 이를 활용하여 사용자의 데이터를 안전하게 저장할 수 있습니다.

더 자세한 내용은 path_provider 패키지 문서를 참고하시기 바랍니다.