我想在Swift中打开一个文本文件,我设法将完整路径作为参数传递:
let dados = String.stringWithContentsOfFile("/Users/aczuquim/Google Drive/Swift/Verdadeiro ou Falso/Verdadeiro ou Falso/Dados.txt", encoding: NSUTF8StringEncoding, error: nil)
因为,我将文件添加到项目中,有没有办法使用相对路径?
当我使用相对路径时,会返回nil
。
更新
在操场上,下面的线路工作正常:
let dados = String.stringWithContentsOfFile("/Users/aczuquim/Google Drive/Swift/Verdadeiro ou Falso/Verdadeiro ou Falso/dados.txt", encoding: NSUTF8StringEncoding, error: nil)
但不是以下的(path
是nil
):
let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("dados", ofType: "txt")
答案 0 :(得分:4)
Swift 3.0
if let bundle = Bundle.main().urlForResource("Info", withExtension: "plist") {
print("Path: \(bundle)")
}
Swift 2.0
let bundleURL = NSBundle.mainBundle()!.URLForResource("dados", withExtension: "txt")
println("\(bundleURL)")
如果返回nil,则找不到资源并报告错误(请注意mainBundle
后的感叹号)。检查构建阶段 - 如果包含资源,则复制捆绑资源。
从[AnyObject]!
数组中获取文档文件夹,将第一个对象强制转换为NSURL
类型:
let docFolderURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
println("DocumentFolderURL: \(docFolderURL)")
然后通过升级到父文件夹并删除最后一个路径组件来获取App文件夹:
let appFolderURL = docFolderURL.URLByDeletingLastPathComponent
println("AppFolderURL: \(appFolderURL)")
可以使用.URLByAppendingPathComponent(pathComponent: String?, isDirectory:Bool)
等访问其他目录。
var tempURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true).URLByDeletingLastPathComponent
请注意,Apple现在更喜欢使用网址来访问文件夹和文件,而新方法则专门使用它们。要在旧方法中使用路径,请致电:tempURL.path