我需要从文本文件中读取和写入数据,但我无法弄清楚如何.
我在Swift的iBook中找到了这个示例代码,但我仍然不知道如何编写或读取数据.
import Cocoa
class DataImporter
{
/*
DataImporter is a class to import data from an external file.
The class is assumed to take a non-trivial amount of time to initialize.
*/
var fileName = "data.txt"
// the DataImporter class would provide data importing functionality here
}
class DataManager
{
@lazy var importer = DataImporter()
var data = String[]()
// the DataManager class would provide data management functionality here
}
let manager = DataManager()
manager.data += "Some data"
manager.data …
Run Code Online (Sandbox Code Playgroud) 我试图将一个字符串附加到文本文件中.我使用以下代码.
let dirs : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if (dirs) != nil {
let dir = dirs![0] //documents directory
let path = dir.stringByAppendingPathComponent("votes")
let text = "some text"
//writing
text.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
//reading
let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
println(text2) //prints some text
}
Run Code Online (Sandbox Code Playgroud)
这不会将字符串附加到文件.即使我反复调用此功能.
嗨,我对快速编程很新,所以如果我犯了明显的错误,请耐心等待.我试图将用户通过文本字段输入的数据写入文本文件.我可以通过下面编写的代码成功完成此操作.但是,当我尝试保存更多数据时,它将使用正在保存的新数据替换文本文件中的现有数据.例如,如果我保存字符串'hello world'然后保存另一个字符串'bye'.我只会在文本文件中看到字符串'bye'.有没有办法可以修改我的代码,这样我就可以在纺织品的一行看到'hello world',在另一行看到'bye'.
@IBAction func btnclicked(_ sender: Any) {
self.savedata(value: answer.text!)
}
func savedata (value: String){
let fileName = "Test"
let DocumentDirURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let fileURL = DocumentDirURL.appendingPathComponent(fileName).appendingPathExtension("txt")
print("FilePath: \(fileURL.path)")
let writeString = NSString(string: answer.text!)
do {
// Write to the file
try writeString.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch let error as NSError {
print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助谢谢你
我是 Swift 新手,尝试将字符串附加到 iOS 应用程序中的文本文件中。
string.write 很简单,但会覆盖现有信息。
write(toFile:atomically:encoding:) 也会覆盖现有信息,尽管文档指出它将来可能会扩展以允许添加信息。
使用 FileHandle 似乎合乎逻辑,但是写入文件的方法 - 例如 init(forWritingTo:) - 需要 write(_:),并且该函数已被 弃用!该文档不建议替代或替代。
let fileName: String = "mytextfile.txt"
let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let newFileUrl = directoryURL!.appendingPathComponent(fileName)
let textToAdd = "Help me, Obiwan!"
if let fileUpdater = try? FileHandle(forUpdating: newFileUrl) {
fileUpdater.seekToEndOfFile()
fileUpdater.write(textToAdd.data(using: .utf8)!)
fileUpdater.closeFile()
}
Run Code Online (Sandbox Code Playgroud)
既然 write(_:) 已被弃用,那么推荐的方法是什么?
我正在使用以下代码,但出现错误。
“无法将 NSURL 类型的值转换为 int32”
在这一行:
if let fileHandle = NSFileHandle(fileDescriptor: fileurl, closeOnDealloc: &err).
Run Code Online (Sandbox Code Playgroud)
并收到此错误
在这一行中“没有更多上下文的表达类型不明确”
if !data.writeToURL(fileurl, options: .DataWritingAtomic, error: &err)
Run Code Online (Sandbox Code Playgroud)
代码:
let dir:NSURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last as NSURL
let fileurl = dir.URLByAppendingPathComponent("log.txt")
let string = "\(NSDate())\n"
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
if NSFileManager.defaultManager().fileExistsAtPath(fileurl.path!) {
var err:NSError?
if let fileHandle = NSFileHandle(fileDescriptor: fileurl, closeOnDealloc: &err) {
fileHandle.seekToEndOfFile()
fileHandle.writeData(data)
fileHandle.closeFile()
}
else {
print("Can't open fileHandle \(err)")
}
}
else {
var err:NSError?
if !data.writeToURL(fileurl, options: .DataWritingAtomic, error: …
Run Code Online (Sandbox Code Playgroud)