[Swift3.0] パスとファイルURLの違いと相互変換の方法

2016年11月3日(更新: 2016年11月3日)

Swiftでアプリ内にファイルを保存したり、そのファイルにアクセスしたりする場合は、ファイルをString型のパスで指定する方法と、URL型のファイルURLで指定する方法の2通りがあります。

これらの違いと、パスとファイルURLの相互変換について紹介します。

パスとファイルURLの違い

以下のコードは、アプリ内のDocumentディレクトリの「パス」と「ファイルURL」を取得するものです。

        // ドキュメントディレクトリの「パス」(String型)
        let documentDirPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        
        // ドキュメントディレクトリの「ファイルURL」(URL型)
        let documentDirFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!

        print(documentDirPath)
        print("--------------------")
        print(documentDirFileURL)

このコードの実行結果は、例えば以下のようになります。

/Users/Username/Library/Developer/CoreSimulator/Devices/562D68E3-7E23-4EDF-A189-0D9C2540B6D6/data/Containers/Data/Application/BCA63062-6848-4EBD-87FE-948031F44F2C/Documents
--------------------
file:///Users/Username/Library/Developer/CoreSimulator/Devices/562D68E3-7E23-4EDF-A189-0D9C2540B6D6/data/Containers/Data/Application/BCA63062-6848-4EBD-87FE-948031F44F2C/Documents/

上が「パス」で、下が「ファイルURL」です。ファイルURLには、先頭に file:// がついていることがわかります。

ファイルを指定するメソッドは、パスを引数に取るものと、ファイルURLを引数に取るものの2種類があるため、どちらを求められているかによってファイル指定にパスを使うか、ファイルURLを使うかが重要になります。

同じ処理のメソッドでもパスを引数とするものと、ファイルURLを引数にするもののどちらとも用意されているものがあります。

以下の記事で紹介した String のメソッド write などがその例です。

[Swift3.0] テキストをファイルに書き込んでアプリ内に保存する

// ファイルURLを引数に取る
func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: String.Encoding) throws

// パスを引数に取る
func write(toFile path: String, atomically useAuxiliaryFile: Bool, encoding enc: String.Encoding) throws

ファイルURLをパスに変換する

URLクラスのプロパティ path には、String型のパスの値が入っています。

ファイルURL.path

パスをファイルURLに変換する

URLクラスのイニシャライザ init(fileURLWithPath path: String) でパスをファイルURLに変換できます。

URL(fileURLWithPath: パス)

相互変換のサンプルコード

以下は実際にこれらを使ってパスとファイルURLの相互変換を行なったサンプルソースコードです。

        // ドキュメントディレクトリの「パス」(String型)
        let documentDirPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        
        // ドキュメントディレクトリの「ファイルURL」(URL型)
        let documentDirFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!
        
        print(documentDirPath)
        print("--------------------")
        print(documentDirFileURL)
        print("--------------------")
        
        // 「ファイルURL」を「パス」に変換
        let path = documentDirFileURL.path
        
        // 「パス」を「ファイルURL」に変換
        let fileURL = URL(fileURLWithPath: documentDirPath)
        
        print(path)
        print("--------------------")
        print(fileURL)

実行結果は以下のようになります。

SwiftでパスとファイルURLの相互変換

出力される文字列が同じになっているので、変換できていることが確認できます。

[Swift3.0] パスとファイルURLの違いと相互変換の方法」への1件のフィードバック

  1. ピンバック: [Swift3.0] テキストをファイルに書き込んでアプリ内に保存する | JoyPlotドキュメント

コメントを残す

メールアドレスが公開されることはありません。