[Swift] Swift でのファイルの読み書き

Swift

Swift での ファイルの読み書きの方法を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • 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
}
コード解説
  1. String(contentsOf:,encoding:) を使用して、ファイルを String に展開します。(エラー処理は省略し、ファイルは、UTF-8 と仮定しています)
  2. 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:) を使用する

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です