Xử lý file trong iOS với Swift (Bài 5)

Xử lý file trong ios với swift là thao tác tạo file, ghi dữ liệu vào file, đọc dữ liệu từ file, xoá file, … Trong bài học xử lý file trong iOS với Swift sẽ giới thiệu với các bạn lớp NSFileManager để quản lý file, lớp NSOutputStream để ghi dữ liệu vào file và sử dụng phương thức enumerateLinesUsingBlock để đọc dữ liệu từ file.

Xử lý file trong ios với swift – Tạo một thể hiện của NSFileManager

Khi có một tham chiếu đến đối tượng quản lý tập tin chúng ta có thể sử dụng nó để thực hiện một số nhiệm vụ xử lý tập tin cơ bản.

fm = NSFileManager.defaultManager()

Xử lý file trong ios với swift – Kiểm tra sự tồn tại của một file (tập tin)

Sử dụng phương thức fileExistsAtPath của lớp NSFileManager để kiểm tra một file cụ thể đã tồn tại hay chưa. Phương thức này nhận vào một tham số String chứa đường dẫn đến một file cần kiểm tra và trả về Boolean cho biết sự tồn tại hay chưa.

let doc = try! fm!.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) 
fp = doc.URLByAppendingPathComponent("Tên tập tin").path!

if fm?.fileExistsAtPath(fp) == true {
 // File đã tồn tại
} else {
 // File chưa tồn tại
}

Xử lý file trong ios với swift – Ghi dữ liệu vào file

Chúng ta sẽ sử dụng NSOutputStream để ghi dữ liệu vào file trong iOS với Swift. Sau đây là các bước thực hiện

Bước 1: Tạo thể hiện của lớp NSOutputStream

var os : NSOutputStream = NSOutputStream(toFileAtPath: fp, append: true)!

Tham số thứ 2 (append) bằng true được sử dụng để thiết lập file cho phép ghi dữ liệu vào cuối file mà không làm mất dữ liệu trước đó.

Bước 2: Gọi phương thức open()

os.open()

Bước 3: Ghi dữ liệu vào file

os.write(data, maxLength: length)

data là nội dung được lưu, length là chiều dài của nội dung. Ví dụ chúng ta muốn lưu chuỗi “Gia Sư Tin Học”

let data : NSString = "Gia Sư Tin Học"
os.write(data as String, maxLength: data.length)

Bước 4: Kết thúc quá trình ghi dữ liệu vào file

os.close()

Xử lý file trong ios với swift – Đọc dữ liệu từ file

Khi một file đã tồn tại, nội dung của file này có thể được đọc và hiển thị trên ứng dụng iOS. Chúng ta sẽ sử dụng phương thức enumerateLinesUsingBlock của lớp NSString để đọc dữ liều từ file trong iOS với Swift.

do {
  // Đọc toàn bộ nội dung tập tin vào NSString.
  let data = try NSString(contentsOfFile: fp, encoding: NSASCIIStringEncoding)
  
  // Duyệt nội dung của file
  data.enumerateLinesUsingBlock({(line, stop) -> () in
    print("Nội dung tập tin: \(line)")
  })
} catch let error as NSError {
  print(error.localizedDescription) 
}

Xử lý file trong ios với swift – Xoá file

Đây là thao tác được sử dụng để xoá một file đã tồn tại. Chúng ta sử dụng phương thức removeItemAtPath của NSFileManager để xoá một file đã tồn tại trong iOS với Swift.

do {
 try fm?.removeItemAtPath(fp)
} catch let error as NSError {
  print(error.localizedDescription) 
}

Xử lý file trong ios với swift – Chương trình mẫu

Giao diện của chương trình mẫu có các chức năng như ghi file, đọc file và xoá file

xu ly file trong ios voi swift 5

Bước 1: Tham chiếu đến các thành phần trong giao diện và khai báo các thành phần cần thiết

@IBOutlet weak var txtInput: UITextView!
@IBOutlet weak var lblOutput: UITextView!

let fileName = "sampleFile.txt"
var fm : NSFileManager?
var fp: String = ""

Bước 2: Tạo thể hiện tại phương thức viewDidLoad

fm = NSFileManager.defaultManager()
let doc = try! fm!.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) 
fp = doc.URLByAppendingPathComponent(fileName).path!

Bước 3: Viết xử lý cho nút Ghi file

@IBAction func btnWrite(sender: AnyObject) {
  let data : NSString = txtInput.text
  var os : NSOutputStream

  if(fm?.fileExistsAtPath(fp) == true){
    os = NSOutputStream(toFileAtPath: fp, append: true)!
    os.open()
    os.write("\n", maxLength: 1)
  } else {
    os = NSOutputStream(toFileAtPath: fp, append: false)!
    os.open()
  }
 
  os.write(data as String, maxLength: data.length)
  os.close() 
}

Bước 4: Viết xử lý cho nút Đọc file

@IBAction func btnRead(sender: AnyObject) {
  if(fm?.fileExistsAtPath(fp) == true){
    let sb = StringBuilder()
 
    do {
     // Đọc toàn bộ nội dùng file vào data
     let data = try NSString(contentsOfFile: fp, encoding: NSASCIIStringEncoding)
 
     data.enumerateLinesUsingBlock({(line, stop) -> () in
       print("Line = \(line)")
       sb.appendLine(line)
     })

    } catch let error as NSError {
      print(error.localizedDescription) 
    }
   // Hiển thị nội dung lên màn hình
   lblOutput.text = sb.toString()
 } else {
   print("File không tồn tại!")
 }
}

Bước 5: Viết xử lý cho nút Xoá file

@IBAction func btnDelete(sender: AnyObject) {
  do {
    try fm?.removeItemAtPath(fp)
    print("Xoá file thành công!")
  } catch let error as NSError {
    print("Xoá file thất bại)
  }
}

Xử lý file trong ios với swift – Bài tập thực hành

Thiết kế và viết xử lý cho chương trình cho phép nhập và hiển thị thông tin về các nền tảng như Android, iOS, WindowsPhone. Mỗi một nền tảng bao gồm tên, hãng và hình đại diện. Ứng dụng gồm 2 màn hình: màn hình thứ nhất cho phép nhập thông tin và lưu vào file. Màn hình thứ hai đọc thông tin từ file và hiển thị vào Table View.

Xem hướng dẫn sử dụng table view trong iOS