LoginSignup
13
10

More than 3 years have passed since last update.

File Managerでデータを書き込む、読み出す、削除する

Last updated at Posted at 2020-10-07

iOSのファイル・ディレクトリにデータを保存・削除する方法です。
directory-structure-computer-icons-mbox-file-system-png-favpng-PTiJThPRJLFFyTW2S74P2Eb0D.jpg
ディレクトリにはローカル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を使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10