【Swift4】プロジェクトのpng画像やmp3音楽ファイル一覧を取得する方法【Objective-C】

2020年8月27日

プロジェクトの中にあるjpgやpngなどの画像データや、mp3やmp4などの音楽データのファイル一覧を取得する方法です。

もくじ

  1. 全てのファイル一覧の取得方法
  2. pngなど特定のファイルのみの一覧の取得方法

なお今回はサンプルとして以下のような構成でのプログラムを紹介しています。
プロジェクトがswiftファイルになっていますがObjective-Cでも同じように3つの画像を追加した状態でのサンプルプログラムを用意しています。

1. 全てのファイル一覧の取得方法

ファイルの取得にはFileManagerクラスのcontentsOfDirectoryメソッドを使います。
注意点としては、ファイル取得ではiOSプロジェクトを作成した時にXcodeが自動でつくる様々なファイルを内包します。

Swift4

// ファイル一覧を取得するためfileManagerをインスタンス
let fileManager = FileManager()

// ファイル一覧の場所であるpathを文字列で取得
let path = Bundle.main.bundlePath

do {

	// pathにあるファイル名文字列で全て取得
	let files = try fileManager.contentsOfDirectory(atPath: path)

	// 文字列のファイル名が配列で取得できる
	print(files)
}
catch let error {
	// pathが存在しない場合などエラーはこちらにくる
	print(error)
}

実行結果

["ja-JP.lproj", "Base.lproj", "_CodeSignature", "META-INF", "TestS", "Frameworks", "Info.plist", "libswiftRemoteMirror.dylib", "PkgInfo", "embedded.mobileprovision", "2.png", "3.png", "1.png"]

Objective-C

// ファイル一覧を取得するためfileManagerをインスタンス
NSFileManager *fileManager = [[NSFileManager alloc] init];
 // ファイル一覧の場所であるpathを文字列で取得
NSString *path = [[NSBundle mainBundle] bundlePath];
NSError *error;

// pathにあるファイル名文字列で全て取得
NSArray *files = [fileManager contentsOfDirectoryAtPath:path error:&error];

if (!error) {
    NSLog(@"%@",files);
}
else {
    // pathが存在しない場合などエラーはこちらにくる
    NSLog(@"%@",error);
}

実行結果

(
    "ja-JP.lproj",
    "en.lproj",
    "Base.lproj",
    "_CodeSignature",
    "META-INF",
    TestO,
    "Info.plist",
    PkgInfo,
    "embedded.mobileprovision",
    "2.png",
    "3.png",
    "1.png"
)

2. pngなど特定のファイルのみの一覧の取得方法

先ほどと同様、ファイルの取得にはFileManagerクラスのcontentsOfDirectoryメソッドを使うことに加え、StringクラスのhasSuffixメソッド(後方一致)を使用します。

Swift4

let fileManager = FileManager()
let path = Bundle.main.bundlePath
do {
    let files = try fileManager.contentsOfDirectory(atPath: path)

    // png画像だけを集める配列を用意
    var images : [String] = []
    
    for file in files {
        // ファイル名の後方が.pngであればtrueとなる
        if file.hasSuffix(".png") {
            images.append(file)
        }
    }
    print(images)
    
}
catch let error {
    print(error)
}

実行結果

["2.png", "3.png", "1.png"]

Objective-C

NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = [[NSBundle mainBundle] bundlePath];
NSError *error;

NSArray *files = [fileManager contentsOfDirectoryAtPath:path error:&error];

if (!error) {
    
    // png画像だけを集める配列を用意
    NSMutableArray *images = [[NSMutableArray alloc] init];
    
    for (NSString *file in files) {
        // ファイル名の後方が.pngであればYESとなる
        if([file hasSuffix:@".png"]) {
            [images addObject:file];
        }
    }
    
    NSLog(@"%@",images);
}
else {
    NSLog(@"%@",error);
}

実行結果

(
    "2.png",
    "3.png",
    "1.png"
)