Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > NSFileManagerでAPP保存領域のデータ操作

NSFileManagerでAPP保存領域のデータ操作

サンプル画像

作成・保存・移動・削除・置換・コピー・ディレクトリ作成等のファイルの操作全般を行うクラスです。

NSFileManagerのクラス階層


NSObject

NSFileManager


参考:Foundation Framework Reference NSFileManager Class Reference
参考:swiftでファイルの書き込み
参考:replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: broken in iOS 6?

やってみた

作成(保存)・移動・削除・コピー・ディレクトリ作成


作成(保存)


let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var fileName = "hogeTest.txt"
let fileObject = "I am Swift-Salaryman! I am inside of hogeTest.txt!!!!"
fileObject.writeToFile(docDir+"/"+fileName, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
  

Documentディレクトリに以下hogeTest.txtが保存されます。(ディレクトリへの移動はFinder -> 移動 -> フォルダ移動 にdocDirの保存場所を入れてください。)

サンプル画像

こんな感じです。(というかNSFileManager利用していませんね、、、、)


移動

上の作成処理の最後に移動させる処理を追加。


let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var fileName = "hogeTest.txt"
let fileObject = "I am Swift-Salaryman! I am inside of hogeTest.txt!!!!"
fileObject.writeToFile(docDir+"/"+fileName, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
    
NSFileManager.defaultManager().moveItemAtPath(docDir+"/"+fileName, toPath: docDir+"/hogeTestTheSecond.txt", error: nil)

同じディレクトリ内部で移動させているのでリネーム動作になっています。moveItemAtPathはパスを記載していますが、moveItemAtURLとNSURLを利用しての移動も可能ですので臨機応変にご利用ください。

サンプル画像

名前が変わりました。(移動しました)


削除

同様に削除の行を最終行に追加しました


let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var fileName = "hogeTest.txt"
let fileObject = "I am Swift-Salaryman! I am inside of hogeTest.txt!!!!"
fileObject.writeToFile(docDir+"/"+fileName, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
    
NNSFileManager.defaultManager().removeItemAtPath(docDir+"/"+fileName, error: nil)

さて、作成されて削除される一連の動作をgifアニメーションで見てみます

サンプル画像

作成されてすぐ削除されるhogeTest.txt。少し切ない気持ちにもなります。


コピー

別名(hogeTestTheSecond.txt)でコピーして同じディレクトリに保存してみます。



let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var fileName = "hogeTest.txt"
let fileObject = "I am Swift-Salaryman! I am inside of hogeTest.txt!!!!"
fileObject.writeToFile(docDir+"/"+fileName, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
    
NSFileManager.defaultManager().copyItemAtPath(docDir+"/"+fileName, toPath: docDir+"/hogetTestTheSecond.txt", error: nil);


サンプル画像

こんな感じです。


ディレクトリ作成


let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String        
NSFileManager.defaultManager().createDirectoryAtPath(docDir+"/hogeDirectory", withIntermediateDirectories: false, attributes: nil, error: nil)

サンプル画像

ディレクトリもこんな簡単に作成できました


上書き

replaceの関数もあるのですが引数が多いので私は以下の方法を利用しています。(移動やWriteでは上書きできずにエラーが発生する)



let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var fileName = "hogeTest.txt"
//削除して
NNSFileManager.defaultManager().removeItemAtPath(docDir+"/"+fileName, error: nil)
//作成
let fileObject = "I am Swift-Salaryman! I am inside of hogeTest.txt!!!!"
fileObject.writeToFile(docDir+"/"+fileName, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
    

カスタマイズ

特になし

まとめ

ファイルやディレクトリ作成はなんとなく面倒くさいイメージがありましたが、この記事で少し自分の中で壁が低くなった気がします。 よろしければご利用くださいませ。

↓こんな記事もありますよ!

カスタムクラスを作成時いつも忘れる。継承クラス作成時のメモ

カスタムクラスを作成する時いつもUIViewを継承する際のrequired Initの箇所でハマってしまうので覚書です。

NSURLSessionでバックグラウンドで通信処理

NSURLConnectionの進化版のような立ち位置に私は感じております。アプリがバックグラウンドになっても通信処理を続けてくれる優れものです。 以前まではどうやら音声や位置情報だけに限られていましたが、このクラスによって大きなデータをユーザに気持ちよくDLしてもらうことも可能にです。

メモリの動きとポインタ

Swiftとポインターはあまり縁がないのかなと思っていたのですが、開発を進めていると 時々このUnsafePointerの名前を見ることがあります。本日はこのPointerが何を表しているかを調査してみます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!