swift:从文档目录加载多个文件
Posted
技术标签:
【中文标题】swift:从文档目录加载多个文件【英文标题】:swift: Load multiple files from documents directory 【发布时间】:2018-07-26 08:04:28 【问题描述】:我在文档目录中有许多文件的文件夹。在我的文件夹中,我有不同扩展名的文件(jpg、png、mp3、zip)。在我的代码中,我有stringArray
。我想在someArray
中加载所有文件,然后在someArray
中添加具有.png
扩展名的文件stringArray
怎么做?
可以这样做吗?或者我应该找到另一种从文档目录加载多个文件的方法?
我为Load multiple images from the folder or directory. - Swift 4
找到answer
我尝试使用来自answer的这段代码:
func loadImagesFromAlbum(folderName:String) -> [String]
let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
var theItems = [String]()
if let dirPath = paths.first
let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(folderName)
do
theItems = try FileManager.default.contentsOfDirectory(atPath: imageURL.path)
return theItems
catch let error as NSError
print(error.localizedDescription)
return theItems
return theItems
但我无法从theItems
获取文件。因为theItems
它是一个字符串数组。我做错了什么?如何从loadImagesFromAlbum
获取文件?
我尝试使用此代码:
images = loadImagesFromAlbum(folderName: "/folder1")
但这对我没有帮助。我只得到名字。但我需要获取文件。
更新
我使用此代码从documents directory
加载图像:
let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
if let dirPath = paths.first
let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("/folder1/1.png")
myImageView.image = UIImage(contentsOfFile: imageURL.path)
但我需要从/folder1
加载 100 张图片到var images = [String]()
。因为我用var images = [String]()
来展示图片:contentVC.imageName = images[index] // and etc...
如果我需要添加 40-100 张图片,我上面使用的代码不是很方便。
更新 1
我有这段代码可以从我的项目中加载图像并显示它:
class PageViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
for page in 1...pageNumber[indexPage]
images.append("page\(page).png")
func getContentViewController(withIndex index: Int) -> ContentViewController?
if index < images.count
let contentVC = self.storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController
contentVC.itemIndex = index
contentVC.imageName = images[index]
return contentVC
return nil
import UIKit
class ContentViewController: UIViewController
@IBOutlet weak var imageView: UIImageView!
var itemIndex: Int = 0
var imageName: String?
override func viewDidLoad()
super.viewDidLoad()
if let currentImage = imageName
imageView.image = UIImage(named: currentImage)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
但我需要从文档目录加载图像并显示它。怎么做?
【问题讨论】:
不清楚你在问什么。您不能将 files 加载到数组中。您可以将文件(其Data
表示)的 contents 加载到数组中。 contentsOfDirectory
返回一个字符串路径数组,它们是磁盘上文件的位置。
@vadian 我更新了问题。在更新标题下方添加新代码。
目前还不清楚。你在谈论 3 个不同的东西:文件路径是 String
,图像是 UIImage
- 你不能将 UIImage
附加到 String
数组 - 但名称 imageName
暗示它只需要文件文件路径的名称(最后一个路径组件)。
@vadian 我更新了我的问题。我在 Update 1 标题下方提出了新问题。如果我的问题不清楚,请告诉我。
【参考方案1】:
如果我正确理解您的问题,您希望在 Documents
文件夹的特定文件夹中加载特定名称的图像。
请试试这个,该方法有两个参数,文件名(带扩展名!)和文件夹名,如果找不到或无法创建图像,则返回UIImage
或nil
。
func loadImage(withName name : String, from folderName: String) -> UIImage?
do
let documentsFolderURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let imageURL = documentsFolderURL.appendingPathComponent(folderName).appendingPathComponent(name)
let data = try Data(contentsOf: imageURL)
return UIImage(data: data)
catch
return nil
使用contentsOfDirectory
获取所有文件路径没有任何好处,因为无论如何您都必须一一加载图像数据。
【讨论】:
谢谢!此代码工作正常。我在 contentViewController 中使用此代码let currentImage = loadImage(withName: imageName!, from: "/folder")
imageView.image = currentImage
。它的用法正确吗?
是的,但您不需要前导 /
。 appendingPathComponent
处理路径分隔符。以上是关于swift:从文档目录加载多个文件的主要内容,如果未能解决你的问题,请参考以下文章
从应用程序的文档目录加载本地 html 文件 swift wkwebview
从 Document 目录加载多个图像时 UICollectionView 卡住