アプリ内で保存したファイルの一覧を取得したい


### 環境

swift3  
Xcode9.0.1

### 実現したいこと

アプリ内で保存したファイルの一覧を取得したい。

### 例

下記のディレクトリにアプリ内で"test1.txt" "test2.text"というファイルを作成し保存します

[code]

    documentDirectoryFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
    
[/code]

その後、上記のディレクトリ内のファイルの一覧を  
test1.txt  
test2.txt  
のように表示したいです。




基本的にはyyzさんの回答と同じことなのですが、最近のApple製APIのトレンドではファイル処理の場合でもパス(`String`)ではなく`URL`を渡すというのが主流なので、そちらの書き方をご紹介しておきます。

[code]

        let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        do {
            let contentUrls = try FileManager.default.contentsOfDirectory(at: documentDirectoryURL, includingPropertiesForKeys: nil)
            let files = contentUrls.map{$0.lastPathComponent}
            print(files) //-> ["test1.txt", "test2.txt"]
        } catch {
            print(error)
        }
    
[/code]

上記の例だと`files`は、フルパスではなく、ファイル名部分(拡張子は含む)の配列になります。

* * *

何点か補足。

  * ファイル関係の操作が必要になったら、まずは[`FileManager`クラス](https://developer.apple.com/documentation/foundation/filemanager)に適当なメソッドが無いか探しましょう。

  * 1行目で`.last`ではなく`[0]`としているのは、非Optionalな結果を得るためです。

  * `lastPathComponent`というのはURL内のパスの最後の要素(ファイルパスの場合、ファイル名部分)を返すプロパティです。Swiftの場合、パス操作用のプロパティやメソッドが`String`型に移入されないので、`URL`で扱える場合はパスよりも`URL`を使った方が便利になることが多いです。




基本的にはyyzさんの回答と同じことなのですが、最近のApple製APIのトレンドではファイル処理の場合でもパス(`String`)ではなく`URL`を渡すというのが主流なので、そちらの書き方をご紹介しておきます。

[code]

        let documentDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        do {
            let contentUrls = try FileManager.default.contentsOfDirectory(at: documentDirectoryURL, includingPropertiesForKeys: nil)
            let files = contentUrls.map{$0.lastPathComponent}
            print(files) //-> ["test1.txt", "test2.txt"]
        } catch {
            print(error)
        }
    
[/code]

上記の例だと`files`は、フルパスではなく、ファイル名部分(拡張子は含む)の配列になります。

* * *

何点か補足。

  * ファイル関係の操作が必要になったら、まずは[`FileManager`クラス](https://developer.apple.com/documentation/foundation/filemanager)に適当なメソッドが無いか探しましょう。

  * 1行目で`.last`ではなく`[0]`としているのは、非Optionalな結果を得るためです。

  * `lastPathComponent`というのはURL内のパスの最後の要素(ファイルパスの場合、ファイル名部分)を返すプロパティです。Swiftの場合、パス操作用のプロパティやメソッドが`String`型に移入されないので、`URL`で扱える場合はパスよりも`URL`を使った方が便利になることが多いです。

