Swift での ファイルの読み書きの方法を説明します。
Sponsor Link
環境&対象
以下の環境で動作確認を行なっています。
- macOS Monterery beta 5
- Xcode 13 beta5
- iOS 15 beta
MEMO
Foundation の基本機能なので、beta でなくとも動きます
URL を使ったファイル指定
Swift では、ローカルに作成されているファイルに対してもその場所は、URL を使用して表現されます。
絶対パス
絶対パスでわかっているのであれば、以下のようにして そのファイルを表す URL を生成できます。
let fileURL = URL(fileURLWithPath: "/tmp/tmpFile.txt")
相対パス
相対パスを使いたいときは、以下のようにします。
let fileURL = URL(fileURLWithPath: "myTmpFile.txt", relativeTo:FileManager.default.temporaryDirectory)
例に見えるように、テンポラリディレクトリ等の情報は、FileManager から取得することができます。
URL をつかったファイル読み込み
String に便利なメソッドが用意されています。
init(contentsOf url: URL, encoding enc: String.Encoding) throws
1つ目の引数は 読み込むファイルの URL を指定し、2つ目の引数は 文字列読み込み時の エンコードを指定します。
Apple のドキュメントは、こちら。
以下のように使用します。
let fileURL = ...
// (1)
let contents = try! String(contentsOf: fileURL, encoding: .utf8)
// (2)
let lines = contents.split(separator: "\n")
for line in lines {
// process line by line
}
コード解説
- String(contentsOf:,encoding:) を使用して、ファイルを String に展開します。(エラー処理は省略し、ファイルは、UTF-8 と仮定しています)
- String を改行コードで分割し、1行ごとに処理しています
URL をつかったファイル書き込み
NSString に便利なメソッドが用意されています。(String から NSString のメソッドを使うことができます。)
func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws
Apple のドキュメントは、こちら。
1つ目の引数は 書き出し先ファイルの URL を指定し、2つ目の引数は ファイル書き出しを atomic にするかの指定、3つ目の引数は 文字列書き出しの際の エンコードを指定します。
let filePath = ...
”””
Hello,
world!
""".write(to: filePath, atomically: true, encoding: .utf8)
上記のコードで
Hello,
world!
という2行を含むテキストファイルが作成されます。
まとめ:Swift でのファイルの読み書き
Swift でのファイルの読み書き
- 対象ファイルは、URL を使って指定する
- 読み込みは、String.init(contentsOf:, encoding:) を使用する
- 書き出しは、NSString.write(to:, atomically:, enc:) を使用する
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
Sponsor Link