读取文件内容无法与FileManager一起使用

时间:2019-04-29 18:47:39

标签: ios swift

我是Swift的新手。

我正在尝试编写一个简单的应用程序,该应用程序仅读取文件并将其内容转换为字符串。我正在使用FileManager和此处给出的Swift 4示例:https://expressjs.com/en/api.html#res.sendFile

虽然没有用。我假设的问题是,我给String(contentsOf: URL)方法提供了错误的URL。抛出的确切错误是因为它不存在而无法打开文件。

下面是我的ViewController.swift代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var testText: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let test = directoryContents()
        do {
            let text = try String(contentsOf: test)
            testText.text! = text
        }
        catch{
            print(error.localizedDescription)
        }
    }
}

func directoryContents() -> URL {
    var dirContents: URL!
    dirContents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    dirContents = dirContents.appendingPathComponent("testdata.txt")
    return dirContents
}

其余的应用程序文件是通用的Single View App文件。我会包含侧边栏的图像,但是问题编辑器在尝试上载时抛出错误。基本上,它看起来像:

testingData/
 testingData/
  TestData/
   testdata.txt
  AppDelegate.swift
  ViewController.swfit
  Main.storyboard
  Assets.xcassets
  LaunchScreen.storyboard
  Info.plist
 Products/
  testingData.app

Main.storyboard上添加了TextView,即我的testText中的ViewController。我试图读取的文件是testdata.txt,这是一个包含文本1,2,3,4,5,6且没有其他内容的文本文件。它是testingData应用程序的成员。

我不确定我缺少什么。如果在这里的其他地方回答了这个问题,请指出我的方向,我将结束。

1 个答案:

答案 0 :(得分:3)

如果文件位于应用程序捆绑包中,则必须使用Bundle

的API
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let test = Bundle.main.url(forResource:"testdata", withExtension: "txt")!
    do {
        let text = try String(contentsOf: test)
        testText.text! = text
    }
    catch {
        print(error)
    }
}

并删除directoryContents()