在 IOS 项目中放置 .txt 文件并从中读取的位置

Posted

技术标签:

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

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

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

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

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

非常感谢!

【问题讨论】:

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

【讨论】:

以上是关于在 IOS 项目中放置 .txt 文件并从中读取的位置的主要内容,如果未能解决你的问题,请参考以下文章

在基于 servlet 的应用程序中放置以及如何读取配置资源文件?

如何在iOS上的共享应用程序组中保存文件并从中读取[重复]

Sbt 在文件中或在多项目中的 commonSettings 中放置设置有啥区别

如何在ios的UIPageControl中放置UICollectionView和按钮?

在三层项目中放置 DTO / POCO

在 C# .cs 文件中放置 using 语句的位置[重复]