Bài 30-Xử lý Serialize File trong Kotlin

[polldaddy poll=9764234]

Bạn đã được học xử lý Text File ở bài 29, Trong bài này Tui tiếp tục hướng dẫn chuỗi bài học xử lý file, đó là Serialize File trong Kotlin

Cũng giống như Text File, Kotlin cũng dùng các thư viện JVM để xử lý Serialize nên nó cũng rất giống với Java.

Serialize File cho phép ta “chụp ảnh” đối tượng xuống ổ cứng và phục hồi hình ảnh từ ổ cứng lên bộ nhớ. Để lưu được dạng Serialize thì các lớp có lưu trữ xuống ổ cứng phải kế thừa interface Serialize.

Các gói thư viện dùng để chụp ảnh và phục hồi ảnh trong trường hợp này gồm:

import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream

Ta tạo một Project mới, cho các lớp tương tự như bài 29 để các bạn dễ so sánh:

Lớp Sản phẩm sẽ implements interface Serialize như dưới đây:

[code language=”groovy”]

import java.io.Serializable
/**
* Created by cafe on 02/06/2017.
*/
class SanPham:Serializable {
var ma:Int=0
var ten:String=””
var donGia:Double=0.0
constructor()
constructor(ma: Int, ten: String, donGia: Double) {
this.ma = ma
this.ten = ten
this.donGia = donGia
}
override fun toString(): String {
return “$ma\t$ten\t$donGia”
}
}

[/code]

Tiếp tục tạo lớp SerializableFileFactory để cung cấp 2 hàm Lưu và đọc tập tin dạng Serialize, kỹ thuật viết như sau:

[code language=”groovy”]

import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream

/**
* Created by cafe on 02/06/2017.
*/
class SerializableFileFactory {
/**
* @author Trần Duy Thanh
* @param data: Dữ liệu là Danh sách sản phẩm muốn lưu
* @param path: Đường dẫn lưu trữ
* @return true nếu lưu thành công, false nếu lưu thất bại
*/
fun LuuFile(data:MutableList,path:String):Boolean
{
try {
var fos=FileOutputStream(path);
var oos=ObjectOutputStream(fos);
oos.writeObject(data);
oos.close();
fos.close();
return true
}
catch (ex:Exception)
{
ex.printStackTrace()
}
return false
}
/**
* @author Trần Duy Thanh
* @param path:đường dẫn muốn đọc dữ liệu
* @return Danh sách sản phẩm MutableList
*/
fun DocFile(path:String):MutableList
{
var data:MutableList = mutableListOf()
try
{
var fis=FileInputStream(path);
var ois=ObjectInputStream(fis);
var obj=ois.readObject();
data= obj as MutableList;
ois.close();
fis.close();
}
catch (ex:Exception)
{
ex.printStackTrace()
}
return data
}
}

[/code]

Ta thấy cách lưu và đọc tập tin dạng Serialize đơn giản hơn rất nhiều so với Text File, và các bạn chú ý là nó không quan tâm cấu trúc mối quan hệ nhằng nhịt giữa các lớp như thế nào. Nó chụp 1 cái BỤP là lưu hết toàn bộ xuống ổ cứng luôn.

Bây giờ tạo hàn main để Test lưu chụp ảnh đối tượng:

[code language=”groovy”]

/**
* Created by cafe on 02/06/2017.
*/
fun main(args: Array) {
var data:MutableList = mutableListOf()
var sp1=SanPham(1,”Coca cola”,15.5)
data.add(sp1)
var sp2=SanPham(2,”Sting”,25.0)
data.add(sp2)
var sp3=SanPham(3,”Redbull”,17.0)
data.add(sp3)
var kqLuu=SerializableFileFactory().LuuFile(data,”d:/dulieusanpham.dat”)
if(kqLuu)
{
println(“Lưu text file thành công”)
}
else
{
println(“Lưu text file thất bại”)
}
}

[/code]

Ở trên Tui lưu tập tin với tập dulieusanpham.dat (đuôi gì cũng được):

Khi chạy hàm main ở trên thì ta có kết quả sau:

Lưu text file thành công

Bây giờ ta vào ổ D xem tập tin dulieusanpham.dat có được lưu thành công hay chưa:

Mở bằng Notepad, bạn thấy nó ra giun dế loằng ngoằng, không giống như Text File

Rõ ràng kết quả đã lưu thành công, bây giờ ta sẽ gọi hàm đọc thông tin lên nhé:

[code language=”groovy”]

fun main(args: Array) {
var data:MutableList = SerializableFileFactory().DocFile(“d:/dulieusanpham.dat”)
for (sp in data)
println(sp)
}

[/code]

Khi chạy hàm main ở trên thì ta có kết quả sau:

1 Coca cola 15.5
2 Sting 25.0
3 Redbull 17.0

Như vậy ta đã lưu và đọc Serialize File thành công, các bạn tự áp dụng vào các dự án cụ thể nhé, cấu trúc Serialize File là dạng nhị phân nên ta đọc không hiểu, chỉ phần mềm của ta đọc mới hiểu.

Các bài sau Tui sẽ trình bày về Xử lý XML File trong Kotlin rất quan trọng trong quá trình xử lý lưu trữ dữ liệu

Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/v66y0alecg7q515/HocSerializeFile.rar

Hẹn gặp các bạn ở những bài tiếp theo

Chúc các bạn thành công!

Trần Duy Thanh (http://communityuni.com/)