【问题标题】:Where to place a .txt file and read from it in a IOS project在 IOS 项目中放置 .txt 文件并从中读取的位置
【发布时间】:2014-11-29 19:31:16
【问题描述】:

我想在我的 Xcode Swift Iphone 项目中放置一个 .txt 文件。 首先,我只是将它从我的桌面拖放到项目中的 Supporting Files 文件夹中。是不是有一个像安卓“资产”一样的文件夹,所以我可以把我的文件放在我想要的任何地方?

我的示例中的文件名为 README.txt,其中包含一堆行和段落。

很简单,现在我想将README.txt文件的内容打印到一个视图中。

如果我的文件在项目 /SupportFiles/README.txt 中,我该如何执行读取功能以及应该插入什么路径?

非常感谢!

【问题讨论】:

  • 我认为你应该使用 plist 文件更有意义
  • 您可以将文件作为资源放置在项目中的任何位置。请参阅下面的@Mundi 答案。如果您愿意,可以将它们组织在名为“SupportFiles”的文件夹中。

标签: ios xcode swift readfile


【解决方案1】:
if let path = Bundle.main.path(forResource: "README", ofType: "txt") {
  do {
    textView.text = try String(contentsOfFile: path, encoding: .utf8)
  } catch let error {
    // Handle error here
  }
}

只需将文件拖放到项目浏览器中的任意位置,并确保将其添加到正确的目标。

只是为了扩展答案,您还可以将它们放在一个文件夹中并使用: + pathForResource:ofType:inDirectory:.

【讨论】:

  • 我在 Xcode 本身上遇到了一些问题,但是在重新启动等之后,它完全按照描述的方式工作。非常感谢你!稍后将尝试按照文件夹组织的链接,对于更大的项目似乎更整洁。但现在我很高兴这个小小的想法有效! (抱歉,无法将答案投票为有用,需要 15 Rep)
  • 谢谢,请在您获得代表后进行。
【解决方案2】:

我建议使用 NSFileManager 并将文件拖放到项目中的任何位置:

if let path = NSBundle.mainBundle().pathForResource(name, ofType: "txt"){
    let fm = NSFileManager()
    let exists = fm.fileExistsAtPath(path)
    if(exists){
        let c = fm.contentsAtPath(path)
        let cString = NSString(data: c!, encoding: NSUTF8StringEncoding)
        ret = cString as! String
    }
}

【讨论】:

  • 为什么要使用 NSFileManager,而不是像其他答案中那样做?
  • 嗨,我想我只是习惯于使用 NSFileManager,因为它允许对文件或文件系统进行其他操作并处理多线程。在这里,我用它在访问文件之前检查路径。我更喜欢首先检查路径,而不是从 String(contentsOfFile ...) 捕获错误,但这只是个人选择。
  • 谢谢。我已经添加了这个的 Swift 4 版本。
【解决方案3】:

Swift 4(感谢@Pierre-Yves Guillemet 的原创)

只要文件在您的项目中(并且有一个 .txt),它就可以工作(在这个例子中,我假设“MyFile.txt”是我项目中的一个文件):

static func LoadFileAsString() -> ()
{        
    if let path = Bundle.main.path(forResource: "MyFile", ofType: "txt")
    {
        let fm = FileManager()
        let exists = fm.fileExists(atPath: path)
        if(exists){
            let content = fm.contents(atPath: path)
            let contentAsString = String(data: content!, encoding: String.Encoding.utf8)
        }
    }
}

【讨论】:

    【解决方案4】:

    在 Swift 3 中

    guard let path = Bundle.main.path(forResource: "README", ofType: "txt") else {
      return
    }
    
    textView.text = try? String(contentsOfFile: path, encoding: String.Encoding.utf8)
    

    【讨论】:

      【解决方案5】:

      如果您定义path's 类型并将! 放在行尾,您将不会收到任何警告。

       let path:String = NSBundle.mainBundle().pathForResource("README", ofType: "txt")!
       textView.text = String(contentsOfFile: path,
                       encoding: NSUTF8StringEncoding,
                       error: nil)
      

      【讨论】:

        【解决方案6】:

        图片和文件有一个Assets.xcassets。 以下是从资产中读取它的方法。

        if let data = NSDataAsset(name: "AssetName")?.data {
            textView.text = String(data: data, encoding: .utf8)
        }
        

        【讨论】:

          猜你喜欢
          • 2015-05-03
          • 2012-08-04
          • 1970-01-01
          • 2012-10-21
          • 2014-09-26
          • 1970-01-01
          • 2011-11-30
          • 2019-11-13
          • 2017-12-04
          相关资源
          最近更新 更多