iOSのファイル・ディレクトリにデータを保存・削除する方法です。
ディレクトリにはローカルURLでアクセスします。
#保存
###1、保存用の宛先URLを作る
DirectoryのURLを検索して、FileのURLをつけたしています。
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("savingImage.jpeg") else { return }
// データに合わせて拡張子を設定してください(例では.jpeg)
print(url)
この時点では、宛先URLが作られただけで、コンテンツ・データは保存されていません。
プリントしたURLはこんな感じです。
file:///var/mobile/Containers/Data/Application/D0C84E1A-DEA6-4D58-8335-C6B075309E95/Library/Document/savingImage.jpeg
/Document/ までがディレクトリURLで、そのあとの savingImage.jpeg は,
付け加えたファイル用URL部分です。
引数の説明
for: SearchPathDirectory // ディレクトリの種類。検索する一番下位。
.documentDirectory // ホームディレクトリ (/Document)
.cachesDirectory // (Library/Caches)
... // まだいっぱいある。存在してかつアクセス可能なディレクトリを与えないとnilが返ってくる。
in: SearchPathDomainMask // ディレクトリパスの一番上位の分岐(多分)。.userDomainMaskしか使ったことない。
.userDomainMask // 現在の使用ユーザーのホームディレクトリ (~/)
.localDomainMask // ユーザーアカウント関係なく利用できる
.networkDomainMask // ネットワーク上で利用可能なアイテムをインストールする場所 (/network)
.systemDomainMask // Appleが提供するシステムファイルのディレクトリ(/System)
.allDomainMask // 全てのドメインを検索できる
appropriateFor: URL // 多分一時ディレクトリの場所を特定するために与えるファイルURL。よくわかっていないのでいつもnil
create: Bool 宛先URLが存在しない場合、新たに作るか
###2、データを書き込む
1、で作った宛先URLに書き込みます。
let data = uiImage.jpegData(compressionQuality: 1.0)
do {
try data?.write(to: url)
} catch let error {
print(error)
}
Data型にしてしまえば、.writeで書き込めます。
#読み出し
###1、ディレクトリ内にあるコンテンツの検索
目的のディレクトリのURLを検索して、中身を表示します。
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) else { return } // 検索するだけなので、createはfalse
do {
let urls = try FileManager.default.contentsOfDirectory(at:url, includingPropertiesForKeys: nil)
print(urls)
} catch let error {
print(error)
}
[file:///private/var/mobile/Containers/Data/Application/95DFCDD1-1D89-4976-9A1F-0FD27DD3F72B/Library/Document/0.jpeg]
###2、データを取得
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("savingImage.jpeg") else { return } // 検索するだけなので、createはfalse
do {
let readData = try Data(contentsOf: url)
let readImage = UIImage(data: readData)
} catch let error {
print(error)
}
#削除
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("savingImage.jpeg") else { return } // 検索するだけなので、createはfalse
do {
try FileManager.default.removeItem(at: url)
} catch let error {
print(error)
}
🐣
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。