[iOS] swift 파일 CRUD의 모든 것

ellyheetov·2021년 7월 24일
3
post-thumbnail
post-custom-banner

Foundation 에서 제공하는 FileManager 클래스를 이용하여 파일을 관리 할 수 있다.

파일 매니저 클래스는 싱글톤 객체(FileManager.default)를 이용하여 파일과 관련된 모든 작업을 수행한다. 파일 생성, 복사, 이동 등 여러가지의 작업이 가능하지만 본 글에서는 읽기, 쓰기, 수정, 삭제만 다뤄 보려고 한다.

File 경로 접근

먼저 파일의 위치를 명시해야 한다. 이때, NSURL 또는 NSString을 사용할 수 있으나, 보통 NSURL을 많이 사용한다. URL은 내부적으로 경로 정보를 보다 효율적인 표현으로 변환할 수 있기 때문이다.

1. 파일 매니저 인스턴스를 생성

let fileManager = FileManager.default

2. 원하는 경로 지정

let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]

urls 메소드는 요청된 도메인에서 지정된 공동 디렉토리에 대한 URL 배열을 리턴해주는 메소드 이다.

  • for : 어떤 디렉토리에 접근 할 것인지 지정
    • 문서 폴더에 접근하고 싶다면 .documentDirectory
    • 다운로드 폴더에 접근하고 싶다면 .downloadsDirectory
  • in : 디렉토리를 검색할 때 사용할 기본 위치 지정. 제한을 걸어주는 요소라고 함(잘 모르겠음)

폴더 추가하기

3. 폴더 경로 지정하기

Documents
  ㄴ MyFolder

Docuements 폴더 내에 나의 폴더를 생성하여 저장하고 싶다면 경로를 추가해 주면 된다.

가지고 온 documentURL에 경로를 추가해보자

let directoryURL = documentURL.appendingPathComponent("MyFolder")

4. 폴더 생성하기

do {
    try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: false, attributes: nil)
} catch let e {
    print(e.localizedDescription)
}

createDirectory는 폴더를 생성하는 메소드이다.

  • at : 경로 및 폴더 명
  • withIntermediateDirectories :
    • true : 주어진 URL에 따라 디렉토리를 만든다.
    • false : 중간 상위 디렉토리가 존재하지 않으면 메소드는 실패한다.
  • attributes : 파일의 접근 권한, 그룹 등등 폴더 속성을 정의한다.

파일 저장하기(CREATE)

5. 파일 명과 내용 채우기

let fileURL = directoryURL.appendingPathComponent("test.txt")

let text = NSString(string: "Hello world")

appendingPathComponent를 이용하여 파일 명을 지정한다. 이때, 확장자를 같이 넣어 주어야 원하는 형식의 파일을 생성할 수 있다.

내부에 들어가는 text는 String이 아닌 NSString 타입을 갖는다.

6. 파일 생성하기 == 파일 저장하기

do {
    try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch let e {
    print(e.localizedDescription)
}

NSString타입은 내부 write 함수를 가지고 있다. 이 메소드를 이용하여 파일 내용쓰기가 가능하다.

  • to : 쓰고 싶은 위치
  • atomically : ?
  • encoding : 인코딩 종류

파일 불러오기(READ)

7. 파일 불러오기

do {
    let text = try String(contentsOf: fileURL, encoding: .utf8)
    print(text) // Hello world
} catch let e {
    print(e.localizedDescription)
}

파일 수정하기(UPDATE)

파일 생성과 동일하다. 파일 생성시에 같은 파일 명이 존재한다면 기존 것을 지우고 새로 생성한다.

파일 삭제하기(DELETE)

8. 파일 삭제하기

do {
    try fileManager.removeItem(at: fileURL)
} catch let e {
    print(e.localizedDescription)
}

추가

파일을 다루는 중에 발생하는 동작이나, 에러들을 다루기 위해서는 FileManagerDelegate를 사용할 수 있다. default 공유 인스턴스를 사용하지 않고, 특별한 파일 매니저 인스턴스를 생성하는 경우에는 반드시 delegate가 필요하다.

참고 링크

https://jiseobkim.github.io/swift/2019/07/11/swift-File-Manager.html

profile
 iOS Developer 좋아하는 것만 해도 부족한 시간
post-custom-banner

0개의 댓글