Documentsディレクトリ内へファイルの保存処理と取得処理
SwiftやPythonなど、勉強した内容の備忘録として、noteに掲載していこうと思います。一回目は、Swiftについて。Documentsディレクトリ内へファイルの保存処理と取得処理について、個人的にいろんな箇所でつまずいたので、以下のとおりにまとめました。
Documentsディレクトリとは
アプリ内で保有しているフォルダの一つでユーザ作成のコンテンツ(文書や画像、動画など)を保存しているのに適している。
(「【Swift4】コピペで出来るDocumentsフォルダの操作方法(画像の保存編)」を参考にしています。)
上記を踏まえて、注意点、保存方法をまとめました。
ディレクトリ操作に関する注意点
Swiftでアプリ内のファイル操作には、ファイルをString型のパスで指定する方法と、URL型のファイルURLで指定する方法の2通りがある。
※ファイルURLは パスの先頭に”file://” が付加されているため、ファイルURLをパスに変換する場合、単純にキャスト(ファイルURL.absoluteString)しても上手くいかない。(「[Swift3.0] パスとファイルURLの違いと相互変換の方法」を参考にしています。)
Documentsディレクトリ内に写真ファイルを保存する
※詳細は、参考文献「【Swift】テキストファイルの読み書き」のとおり。
① Documentsディレクトリ のファイルURLを取得
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
②保存する写真データの名前をつける。
※名前が重複すると保存できない。撮影した年月日時間を名前に入れてあげるなど工夫が必要。(「撮影した動画ファイルを iOS アプリ内に保存し、任意のタイミングでフォトライブラリに書き出す Swift コード」を参考にしています。)
let fileName: String? = "IMG.jpg"
③ディレクトリのパスにファイル名をつなげてファイルのフルパスを作成
let fileURL = documentsURL.appendingPathComponent(fileName!)
④写真ファイルをDocumentsディレクトリへ保存する
※名前が重複すると保存できない。撮影した年月日時間を名前に入れてあげるなど工夫が必要。
let jpgImageData = image.jpegData(compressionQuality:0.5)
do {
try jpgImageData!.write(to: fileURL, options: .atomic)
} catch {
print(error)
}
Documentsディレクトリ内のファイルを全て取得する
※詳細は、参考文献「【Swift】テキストファイルの読み書き」のとおり。
① Documentsディレクトリ のファイルURLを取得
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
②Documents ディレクトリ配下のファイル一覧をURL型で取得する
do {
let contentURLs = try FileManager.default.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
} catch {
print("error")
}
※FileManager.default.contentsOfDirectory(at: documentsURL)の場合、 ファイル名の一覧が取得できます。(["file1", "file2", "directory1"])
(参考文献「[iOS][Swift]指定したディレクトリにあるファイルの一覧を取得する」のとおり。)
参考文献
・【Swift4】コピペで出来るDocumentsフォルダの操作方法(画像の保存編)
・[Swift3.0] パスとファイルURLの違いと相互変換の方法
・撮影した動画ファイルを iOS アプリ内に保存し、任意のタイミングでフォトライブラリに書き出す Swift コード
・[iOS][Swift]指定したディレクトリにあるファイルの一覧を取得する
・【Swift】URLでパスを扱うときに便利なプロパティとメソッド←URL型を選択した理由
この記事が気に入ったらサポートをしてみませんか?