在swift、iOS中读取文件
在搜索了很多(很多!)swift游乐场的问题后,我仍然在挣扎 我在包内容的在swift、iOS中读取文件,ios,xcode,swift,swift-playground,Ios,Xcode,Swift,Swift Playground,在搜索了很多(很多!)swift游乐场的问题后,我仍然在挣扎 我在包内容的参考资料文件夹中放置了一个文本文件,它作为别名(链接)出现在游乐场生成的运行临时文件中(/var/folders/…) 我在使用TextEdit从.rtf文件创建的.txt文件中看到了这个问题 我在我的游乐场的资源文件夹中加载了一个text.txt文件,使用了与您类似的代码。文件内容是“hello there”,通过更改扩展名将.rtf文件转换为.txt来实现 let path = NSBundle.mainBundle(
参考资料文件夹中放置了一个文本文件,它作为别名(链接)出现在游乐场生成的运行临时文件中(/var/folders/…
)
我在使用TextEdit从.rtf文件创建的.txt文件中看到了这个问题
我在我的游乐场的资源文件夹中加载了一个text.txt文件,使用了与您类似的代码。文件内容是“hello there”,通过更改扩展名将.rtf文件转换为.txt来实现
let path = NSBundle.mainBundle().pathForResource("text", ofType: "txt")//or rtf for an rtf file
var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)!
println(text)
结果是:
{\rtf1\ansi\ansicpg1252\cooartf1343\cocoasubrtf140
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx7920\tx8640\tx8640\PARDIR
\f0\fs24\cf0你好}
所以“hello there”是嵌入的。这就是.rtf文件中所有布局信息的问题
我回到TextEdit并创建了一个true.txt文件。打开文件格式后,生成纯文本
现在,同样的代码给出了控制台输出“hello here”。您可以尝试创建一个类来打开和保存文件:
更新:Xcode 10•Swift 4.2
class File {
class func open(_ path: String, encoding: String.Encoding = .utf8) -> String? {
if FileManager.default.fileExists(atPath: path) {
do {
return try String(contentsOfFile: path, encoding: encoding)
} catch {
print(error)
return nil
}
}
return nil
}
class func save(_ path: String, _ content: String, encoding: String.Encoding = .utf8) -> Bool {
do {
try content.write(toFile: path, atomically: true, encoding: encoding)
return true
} catch {
print(error)
return false
}
}
}
用法:File.save
let stringToSave: String = "Your text"
let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave)
if didSave { print("file saved") } else { print("error saving file") }
用法:File.open
if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
print(loadedData)
} else {
println("error reading file")
}
如果您更喜欢使用URL
s(正如我所做的和苹果推荐的那样):
注意在Swift 4中,类URL
已经存在
如果我将dict1.txt
文件放在适当的位置,该代码对我来说可以正常工作。你的dict1.txt
文件中有什么?它与你在内容
变量中看到的有何不同?@MikeS,你的简单问题让我得到了(显而易见的)答案,这真是令人惊讶。是的,当然内容
与文件匹配。我永远不会感到累。让我失望的是转义的'\n'
,它使内容看起来像一条路径控制台输出println
。关于控制台的更多信息。有用的信息,但显然这个问题不会受到RTF问题的影响。尽管我对自己犯的错误感到很愚蠢,但我确信我不会犯这个错误!
let stringToSave: String = "Your text"
let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave)
if didSave { print("file saved") } else { print("error saving file") }
if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
print(loadedData)
} else {
println("error reading file")
}
class Url {
class func open(url: URL) -> String? {
do {
return try String(contentsOf: url, encoding: String.Encoding.utf8)
} catch {
print(error)
return nil
}
}
class func save(url: URL, fileContent: String) -> Bool {
do {
try fileContent.write(to: url, atomically: true, encoding: .utf8)
return true
} catch {
print(error)
return false
}
}
}