Read and write a String from text file

前端 未结 21 1424
别跟我提以往
别跟我提以往 2020-11-22 00:02

I need to read and write data to/from a text file, but I haven\'t been able to figure out how.

I found this sample code in the Swift\'s iBook, but I still don\'t kno

相关标签:
21条回答
  • 2020-11-22 00:49

    You may find this tool useful to not only read from file in Swift but also parse your input: https://github.com/shoumikhin/StreamScanner

    Just specify the file path and data delimiters like this:

    import StreamScanner
    
    if let input = NSFileHandle(forReadingAtPath: "/file/path")
    {
        let scanner = StreamScanner(source: input, delimiters: NSCharacterSet(charactersInString: ":\n"))  //separate data by colons and newlines
    
        while let field: String = scanner.read()
        {
            //use field
        }
    }
    

    Hope, this helps.

    0 讨论(0)
  • 2020-11-22 00:49

    To avoid confusion and add ease, I have created two functions for reading and writing strings to files in the documents directory. Here are the functions:

    func writeToDocumentsFile(fileName:String,value:String) {
        let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
        let path = documentsPath.stringByAppendingPathComponent(fileName)
        var error:NSError?
        value.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: &error)
    }
    
    func readFromDocumentsFile(fileName:String) -> String {
        let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
        let path = documentsPath.stringByAppendingPathComponent(fileName)
        var checkValidation = NSFileManager.defaultManager()
        var error:NSError?
        var file:String
    
        if checkValidation.fileExistsAtPath(path) {
            file = NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil) as! String
        } else {
            file = "*ERROR* \(fileName) does not exist."
        }
    
        return file
    }
    

    Here is an example of their use:

    writeToDocumentsFile("MyText.txt","Hello world!")
    
    let value = readFromDocumentsFile("MyText.txt")
    println(value)  //Would output 'Hello world!'
    
    let otherValue = readFromDocumentsFile("SomeText.txt")
    println(otherValue)  //Would output '*ERROR* SomeText.txt does not exist.'
    

    Hope this helps!

    Xcode Version: 6.3.2

    0 讨论(0)
  • 2020-11-22 00:51

    For reading and writing you should use a location that is writeable, for example documents directory. The following code shows how to read and write a simple string. You can test it on a playground.

    Swift 3.x - 5.x

    let file = "file.txt" //this is the file. we will write to and read from it
    
    let text = "some text" //just a text
    
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
    
        let fileURL = dir.appendingPathComponent(file)
    
        //writing
        do {
            try text.write(to: fileURL, atomically: false, encoding: .utf8)
        }
        catch {/* error handling here */}
    
        //reading
        do {
            let text2 = try String(contentsOf: fileURL, encoding: .utf8)
        }
        catch {/* error handling here */}
    }
    

    Swift 2.2

    let file = "file.txt" //this is the file. we will write to and read from it
    
    let text = "some text" //just a text
    
    if let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
        let path = NSURL(fileURLWithPath: dir).URLByAppendingPathComponent(file)
    
        //writing
        do {
            try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding)
        }
        catch {/* error handling here */}
    
        //reading
        do {
            let text2 = try NSString(contentsOfURL: path, encoding: NSUTF8StringEncoding)
        }
        catch {/* error handling here */}
    }
    

    Swift 1.x

    let file = "file.txt"
    
    if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] {
        let dir = dirs[0] //documents directory
        let path = dir.stringByAppendingPathComponent(file);
        let text = "some text"
    
        //writing
        text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
    
        //reading
        let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
    }
    
    0 讨论(0)
  • 2020-11-22 00:51

    I want to show you only the first part, that is read. Here's how simply you can read:

    Swift 3:

    let s = try String(contentsOfFile: Bundle.main.path(forResource: "myFile", ofType: "txt")!)
    

    Swift 2:

    let s = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("myFile", ofType: "txt")!)
    
    0 讨论(0)
  • 2020-11-22 00:53

    This works with Swift 3.1.1 on Linux:

    import Foundation
    
    let s = try! String(contentsOfFile: "yo", encoding: .utf8)
    
    0 讨论(0)
  • 2020-11-22 00:53

    Swift 3.x - 5.x

    The Best Example is to Create a Local Logfile with an Extension .txt that can visible and show in the "Files App" with current date and Time as a File Name

    just add this code in info.plist enable these two features

      UIFileSharingEnabled
      LSSupportsOpeningDocumentsInPlace
    

    and this Function Below

    var logfileName : String = ""
    
    func getTodayString() -> String{
    
        let date = Date()
        let calender = Calendar.current
        let components = calender.dateComponents([.year,.month,.day,.hour,.minute,.second], from: date)
    
        let year = components.year
        let month = components.month
        let day = components.day
        let hour = components.hour
        let minute = components.minute
        let second = components.second
    
        let today_string = String(year!) + "-" + String(month!) + "-" + String(day!) + "-" + String(hour!)  + "" + String(minute!) + "" +  String(second!)+".txt"
    
        return today_string
    
    }
    
    func LogCreator(){
        logfileName = getTodayString()
    
        print("LogCreator: Logfile Generated Named: \(logfileName)")
    
        let file = logfileName //this is the file. we will write to and read from it
    
        let text = "some text" //just a text
    
        if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
    
            let fileURL = dir.appendingPathComponent(file)
            let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true)[0]
            print("LogCreator: The Logs are Stored at location \(documentPath)")
    
    
            //writing
            do {
                try text.write(to: fileURL, atomically: false, encoding: .utf8)
            }
            catch {/* error handling here */}
    
            //reading
            do {
                let text2 = try String(contentsOf: fileURL, encoding: .utf8)
                print("LogCreator: The Detail log are :-\(text2)")
            }
            catch {/* error handling here */}
        }
    }
    
    
      [1]: https://i.stack.imgur.com/4eg12.png
    
    0 讨论(0)
提交回复
热议问题