File Manager
FileManager 클래스는 파일 시스템에 대한 접근을 제공하여 파일 및 디렉토리를 관리하는 데 사용된다. 이 클래스는 파일 및 디렉토리를 생성, 복사, 이동, 삭제하고 파일 내용을 읽고 쓰는 등의 작업을 수행할 수 있다. FileManager는 Foundation 프레임워크에 포함되어 있다.
File Manager 사용하기
1. 경로 접근
fileManager라는 이름을 가진 인스턴스를 생성한다.
fileManager.urls의 for는 폴더를 정해주는 요소이다. in은 제한을 걸어주는 요소이다.
let fileManager = FileManager.default
let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] //.first를 사용해도 된다.
for에 사용할 수 있는 enum 값들(링크)
in에 사용할 수 있는 enum 값들(링크)
2. 경로 추가
위에서 생성한 documentURL에 appendingPahtComponent를 해줌으로써 경로를 추가한다.
let oldURL = URL(string: "~/Document")
let newURL = documentURL.appendingPathComponent("Hello")
print(newURL) // ~/Document/Hello
// 이해를 돕기위한 oldURL
3. 폴더 추가
fileManager에 .createDirectory 메서드를 사용해서 폴더를 추가할 수 있다.
at에는 경로 및 폴더명, withIntermediateDirectories에는 중간 디렉토리들도 만들건지, attributes에는 파일 접근 권한, 그룹 등 폴더 속성을 정의한다.
let fileManager = FileManager.default
let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURL = documentURL.appendingPathComponent("NewDirectory")
do {
try fileManager.createDirectory(at: directoryURL, withIntermediatedDirectories: false, attributes: nil)
} catch let error {
print(error.localizedDescription)
}
4. 파일 추가
파일명을 fileURL에 지정해주고 NSString을 생성한다. NSString의 내부 함수에 write가 존재하기 때문에 파일에 쓰기가 가능하다.
(write가 이미 되어 있는 상태에선 새로운 값으로 덮어 씌운다.)
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURL = documentsURL.appendingPathComponent("NewDirectory")
let fileURL = directoryURL.appendingPathComponent("test.txt")
let text = NSString(string: "Hello world")
do {
try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch let error {
print(error.localizedDescription)
}
5. 파일 불러오기
불러올 파일을 설정하고 저장할 타입을 활용하여 불러오면 된다.
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURL = documentsURL.appendingPathComponent("NewDirectory")
let helloPath = directoryURL.appendingPathComponent("test.txt")
do {
let text = try String(contentsOf: helloPath, encoding: .utf8)
print(text) // Hello world
} catch let error {
print(error.localizedDescription)
}
6. 파일 삭제
fileManager에서 .removeItem 메서드를 활용해서 파일을 삭제할 수 있다.
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURL = documentsURL.appendingPathComponent("NewDirectory")
let helloPath = directoryURL.appendingPathComponent("test.txt")
do {
try fileManager.removeItem(at: fileURL)
} catch let error {
print(error.localizedDescription)
}
참조 : 링크