Swift 3下如何读取目录文件及Assets内自定义文件夹文件?
Swift 文件目录读取与Assets资源处理指南
一、先解决Documents目录读取的问题
你之前的代码思路其实没大问题,但可能因为API使用细节或错误处理不到位导致失败。Swift里更推荐用URL而非字符串路径来处理文件操作,能避免很多编码、路径拼接的坑,下面给你一个可靠的实现:
正确的Documents目录文件读取示例
func fetchDocumentsDirectoryFiles() -> [String]? { let fileManager = FileManager.default // 优先用URL获取Documents目录,比path更可靠 guard let docsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { print("无法获取Documents目录路径") return nil } do { // 获取目录下所有文件的URL数组 let fileURLs = try fileManager.contentsOfDirectory(at: docsURL, includingPropertiesForKeys: nil) // 提取文件名返回 let fileNames = fileURLs.map { $0.lastPathComponent } return fileNames } catch { print("读取Documents目录失败:\(error.localizedDescription)") return nil } } // 调用示例 if let files = fetchDocumentsDirectoryFiles() { print("Documents下的文件列表:\(files)") } else { print("读取Documents目录失败") }
二、Assets目录的文件处理关键说明
首先要明确一个核心点:Assets是编译时打包进App的只读资源目录,运行时无法动态创建文件夹。如果想在Assets里组织文件结构,只能在Xcode中手动创建两种类型的文件夹:
- 蓝色「Folder Group」:会扁平化文件结构,编译后文件直接放在根资源目录,无法通过目录路径批量读取
- 黄色「Folder Reference」:会保留原有的目录结构,运行时可以通过目录URL读取里面的所有文件
读取Assets中指定文件夹的示例
假设你在Xcode里创建了一个名为CustomAssetsFolder的黄色Folder Reference,下面是读取它内部文件的代码:
func fetchAssetsFolderFiles() -> [String]? { // 获取Assets中目标文件夹的URL guard let folderURL = Bundle.main.url(forResource: "CustomAssetsFolder", withExtension: nil) else { print("找不到Assets中的CustomAssetsFolder目录") return nil } let fileManager = FileManager.default do { let fileURLs = try fileManager.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil) let fileNames = fileURLs.map { $0.lastPathComponent } return fileNames } catch { print("读取Assets文件夹失败:\(error.localizedDescription)") return nil } } // 调用示例 if let assetsFiles = fetchAssetsFolderFiles() { print("CustomAssetsFolder下的文件:\(assetsFiles)") } else { print("读取Assets文件夹失败") }
三、核心区别总结
- 沙盒目录(如Documents):可读写,适合存放用户生成的动态文件,用
FileManager结合URL操作最稳妥 - Assets目录:只读,只能在Xcode中预先组织文件结构,运行时无法修改,批量读取必须用Folder Reference保留目录结构
内容的提问来源于stack exchange,提问作者Curnelious
相关产品推荐
相关产品推荐

