Foundation 에서 제공하는 FileManager 클래스를 이용하여 파일을 관리 할 수 있다.
파일 매니저 클래스는 싱글톤 객체(FileManager.default)를 이용하여 파일과 관련된 모든 작업을 수행한다. 파일 생성, 복사, 이동 등 여러가지의 작업이 가능하지만 본 글에서는 읽기, 쓰기, 수정, 삭제만 다뤄 보려고 한다.
먼저 파일의 위치를 명시해야 한다. 이때, NSURL 또는 NSString을 사용할 수 있으나, 보통 NSURL을 많이 사용한다. URL은 내부적으로 경로 정보를 보다 효율적인 표현으로 변환할 수 있기 때문이다.
let fileManager = FileManager.default
let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
urls 메소드는 요청된 도메인에서 지정된 공동 디렉토리에 대한 URL 배열을 리턴해주는 메소드 이다.
for
: 어떤 디렉토리에 접근 할 것인지 지정.documentDirectory
.downloadsDirectory
in
: 디렉토리를 검색할 때 사용할 기본 위치 지정. 제한을 걸어주는 요소라고 함(잘 모르겠음)Documents
ㄴ MyFolder
Docuements 폴더 내에 나의 폴더를 생성하여 저장하고 싶다면 경로를 추가해 주면 된다.
가지고 온 documentURL
에 경로를 추가해보자
let directoryURL = documentURL.appendingPathComponent("MyFolder")
do {
try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: false, attributes: nil)
} catch let e {
print(e.localizedDescription)
}
createDirectory는 폴더를 생성하는 메소드이다.
at
: 경로 및 폴더 명withIntermediateDirectories
: true
: 주어진 URL에 따라 디렉토리를 만든다.false
: 중간 상위 디렉토리가 존재하지 않으면 메소드는 실패한다.attributes
: 파일의 접근 권한, 그룹 등등 폴더 속성을 정의한다.let fileURL = directoryURL.appendingPathComponent("test.txt")
let text = NSString(string: "Hello world")
appendingPathComponent
를 이용하여 파일 명을 지정한다. 이때, 확장자를 같이 넣어 주어야 원하는 형식의 파일을 생성할 수 있다.
내부에 들어가는 text는 String
이 아닌 NSString
타입을 갖는다.
do {
try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch let e {
print(e.localizedDescription)
}
NSString
타입은 내부 write
함수를 가지고 있다. 이 메소드를 이용하여 파일 내용쓰기가 가능하다.
to
: 쓰고 싶은 위치atomically
: ?encoding
: 인코딩 종류do {
let text = try String(contentsOf: fileURL, encoding: .utf8)
print(text) // Hello world
} catch let e {
print(e.localizedDescription)
}
파일 생성과 동일하다. 파일 생성시에 같은 파일 명이 존재한다면 기존 것을 지우고 새로 생성한다.
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