iosswift2nsfilehandle

Append new string to txt file in swift 2


I used to do coding in java but now I want to move my app to iOS using swift 2. So I want a method to append text in new line to an existing txt file in app documents.

I searched and tried so many methods but its all overwriting to new txt file

In java i used this method

PrintWriter out=null;
        try {
            out=new PrintWriter(new FileWriter("file.txt",true));

                    out.println("some txt"}


                out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

Solution

  • I think you must use NSFileHandle:

      let dir:NSURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last as NSURL
      let fileurl =  dir.URLByAppendingPathComponent("file.txt")
    
      let string = "\(NSDate())\n"
      let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    
      if NSFileManager.defaultManager().fileExistsAtPath(fileurl.path!) {
            var error:NSError?
            if let fileHandle = NSFileHandle(forWritingToURL: fileurl, error: &error) {
                fileHandle.seekToEndOfFile()
                fileHandle.writeData(data)
                fileHandle.closeFile()
            }
            else {
                println("Can't open fileHandle \(error)")
            }
      }
      else {
            var error:NSError?
            if !data.writeToURL(fileurl, options: .DataWritingAtomic, error: &error) {
                println("Can't write \(error)")
            }
      }