https://api.dart.dev/stable/3.5.3/dart-io/File-class.html
File class - dart:io library - Dart API
A reference to a file on the file system. A File holds a path on which operations can be performed. You can get the parent directory of the file using parent, a property inherited from FileSystemEntity. Create a new File object with a pathname to access th
api.dart.dev
dart 공식 문서에서 임포트한 csv 파일을 변환해서 출력하는 예시 코드를 따왔다.
여기서 사용한 monsters.csv 파일의 내용은 다음과 같다.
Batman,30,20
Spiderman,20,30
Superman,30,10
가져온 파일을 변환하는 코드에 대해 살펴보겠다.
1. openRead
openRead()는 int형식의 스트림을 반환한다. 사람이 읽을 수 있는 형태가 아닌, utf 형식의 데이터이다.
코드
결과
listen 없이 openRead()자체의 값은 Stream이라는 것만 확인할 수 있다.
listen으로 내부의 데이터를 가져오면 사람이 이해할 수 없는 숫자의 나열을 결과로 반환한다.
2. utf8.decoder
1 에서 받은 Stream을 사람이 이해할 수 있는 형태로 변환한다. 여기서는 UTF-8로 인코딩된 바이트 데이터를 변환한다.
3. LineSplitter()
1의 openRead()내부 값을 보면 알 수 있듯, 줄 구분 없이 Stream형태로 값을 가져온 것을 볼 수 있다.
LineSplitter()은 해당 결과를 원본의 줄바뀜을 기준으로 나누어 주어, 결과적으로 한 줄이 하나의 스트링이 된다.
openRead()는 컴퓨터만 이해할 수 있는 형식의 결과를 가지고 비동기 방식으로 작동하기 때문에 속도가 빠르고 메모리를 적게 사용한다는 장점이 있다. 하지만 사람이 이해할 수 없기 때문에 결과를 사용하는 과정이 복잡하다.
아래는 조금 더 직관적으로 csv 파일을 읽어오는 방법이다.
다만, 메모리 사용량이 openRead()보다 많기 때문에 크기가 작은 파일에 적합하다.
readAsString() 사용
코드
결과
결과 타입: String
줄나눔이 있어 각각 다른 String인 것 같지만 하나의 String이다.
readAsLines() 사용
코드
결과
결과 타입: List<String>
줄별로 결과를 읽으므로 편리하나 메모리 사용량이 많다.
'Dart' 카테고리의 다른 글
[Dart] writeAsStringSync 메서드를 이용한 파일 저장 (0) | 2025.03.19 |
---|---|
[Dart] 정규표현식 - 문자열 검색 (0) | 2025.03.18 |
[Dart] 비동기 프로그래밍 - Future (0) | 2025.03.14 |
[Dart] 콘솔 쇼핑몰 트러블슈팅 (0) | 2025.03.13 |
[Dart] 메서드의 사용 (0) | 2025.03.12 |