Truy cập file ở chế độ tuần tự

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 83 - 87)

Khi làm việc với Java, tất cả đều là đối tượng. Trong cỏc ứng dụng quản lý ta thường xuyờn phải đọc và ghi dữ liệu về cỏc đối tượng lờn ổ cứng. Cỏc lớp ObjectInputStream và ObjectOutputStream cho phộp chỳng ta đọc và ghi đối tượng vào file.

Để cho phộp một đối tượng của một lớp cú thể sử dụng với ObjectInputStrems và ObjectOutputStreams, lớp đú phải khai bỏo cài đặt giao diện Serializable.

Giao diện Serializable được biết đến như là một giao diện “đớnh kốm” bởi vỡ bản thõn nú khụng chứa bất kỳ một phương thức nào. Một class cài đặt giao diện này được gỏn một thụng bỏo rằng đối tượng của lớp là một đối tượng Serializable. Điều này rất quan trọng bởi vỡ một đối tượng ObjectOutputStream sẽ khụng xuất một đối tượng trừ khi đú là một đối tượng Serializable.

Trong một lớp cài đặt Serializable, lập trỡnh viờn phải đảm bảo rằng mọi biến của lớp phải cú kiểu Serializable hoặc phải khai bỏo một biến là transient để bỏ qua trong quỏ trỡnh tuần tự húa. Mặc định thỡ tất cả cỏc kiểu dữ liệu nguyờn thủy đều là tuần tự húa. Với cỏc kiểu khụng nguyờn thủy, phải kiểm tra xem định nghĩa của lớp (hoặc lớp cha) cú cài đặt Serializable hay khụng.

Sau đõy là một vớ dụ về xõy dựng một lớp đối tượng khỏch hàng cho một ứng dụng ngõn hàng sau đú ghi chỳng vào file:

import java.io.Serializable;

public class AccountRecord implements Serializable { private int account;

private String firstName; private String lastName;

private double balance; // Chỉ số nắm giữ hàng húa và dịch vụ của khỏch hàng, số dư tài

khoản

public AccountRecord()// constructor khụng tham số {

this( 0, "", "", 0.0 ); }

public AccountRecord( int acct, String first, String last, double bal ) // Constructor cú tham số { setAccount( acct ); setFirstName( first ); setLastName( last ); setBalance( bal ); }

public void setAccount( int acct ) // éặt số tài khoản {

account = acct; }

public int getAccount()// Lấy số tài khoản {

return account; }

public void setFirstName( String first ) // éặt giỏ trị cho phần họ đệm {

firstName = first; }

public String getFirstName()// Lấy phần họ đệm {

return firstName; }

public void setLastName( String last ) // éặt giỏ trị cho tờn {

lastName = last; }

public String getLastName()// Lấy tờn {

return lastName; }

public void setBalance( double bal ) // Đặt giỏ trị cho balance {

balance = bal; }

public double getBalance()// Lấy số dư {

return balance; }

Chương trỡnh sau đõy sẽ ghi cỏc đối tượng vào file C:\LETI\JAVA\Account.txt import java.io.*;

public class GhiFile {

ObjectOutputStream output; public void openFile() {

try {

output = new ObjectOutputStream(new FileOutputStream( "C:\\LETI\\JAVA\\Account.txt") );

}

catch ( IOException ioException ) { System.out.print("Loi mo file"); }

}

public void closeFile() // Phương thức đúng file {

try {

output.close(); System.exit( 0 ); }

// Nếu cú lỗi đúng file

catch ( IOException ioException ) {

System.exit( 1 ); }

}

public void addRecord(AccountRecord record) // Phương thưc thờm 1 bản ghi vào file { try { output.writeObject( record ); output.flush(); } catch(IOException ex) {

System.out.print("Loi ghi file"); }

}

// Hàm main

public static void main(String[] argvs) {

AccountRecord record1= new AccountRecord( 12345,"Nguyen Van ","Hai",5.12); AccountRecord record2= new AccountRecord( 12346,"Phan Tien ","Minh",-5.12); GhiFile g = new GhiFile();

g.openFile();

g.addRecord(record1); g.addRecord(record2); g.closeFile();

} }

Chương trỡnh sau đõy đọc ra 2 bản ghi vừa được ghi ở chương trỡnh trờn và in ra màn hỡnh:

import java.io.*; public class DocFile {

java.io.ObjectInputStream input; public void openFile() // Mở file {

try {

input = new java.io.ObjectInputStream(new FileInputStream("C:\\LETI\\JAVA\\Account.txt")); } catch(IOException e)

{

System.out.print("Loi mo file"); }

}

public void closeFile() //Đúng file {

try {

input.close(); System.exit( 0 ); }

catch ( IOException ioException ) {

System.exit( 1 ); }

}

// Phương thức đọc 1 bản ghi public String readFile() {

String account=""; try {

AccountRecord a = (AccountRecord)input.readObject(); account =String.valueOf( a.getAccount() ) + "\n "

+ a.getFirstName() + "\n " + a.getLastName() + "\n "

+ String.valueOf( a.getBalance()); }

catch(Exception p){} finally {return account;}

}

public static void main(String[] argvs) {

DocFile d = new DocFile(); d.openFile();

System.out.println(d.readFile()); System.out.println(d.readFile()); d.closeFile();

}}

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 83 - 87)