在 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 的应用程序中放置以及如何读取配置资源文件?
Sbt 在文件中或在多项目中的 commonSettings 中放置设置有啥区别