Lớp InputStream:

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

Là một lớp trừu tượng định nghĩa cỏch thức nhận dữ liệu. Cú cỏc phương thức chớnh sau: • read(): Đọc cỏc byte dữ liệu từ một dũng. Nếu như khụng cú byte dữ liệu nào, nú

phải chờ. Khi một phương thức phải chờ, cỏc luồng đang thực hiện phải tạm dừng cho đến khi cú dữ liệu.

• read(byte[]): Trả về số byte đọc được hay ‘-1’ nếu như đó đọc đến cuối dũng. Nú gõy ra ngoại lệ IOException nếu cú lỗi xảy ra.

• read(byte[],int,int): Nú cũng đọc vào một mảng byte. Nú trả về số byte thực sự đọc được cho đến khi kết thỳc dũng. Nú gõy ra ngoại lệ IOException nếu lỗi xảy ra. • available(): Phương phỏp này trả về số lượng byte cú thể đọc được mà khụng phải

chờ. Nú trả về số byte hiện tại cú trong dũng. Nú khụng phải là phương thức tin cậy để thực hiện tiến trỡnh xử lý đầu vào.

• close(): Phương thức này đúng dũng. Nú dựng để giải phúng mọi tài nguyờn dũng đó sử dụng. Luụn luụn đúng dũng để chắc chắn rằng dũng xử lý được kết thỳc. Nú gõy ra ngoại lệ IOException nếu lỗi xảy ra.

• mark(): Đỏnh dấu vị trớ hiện tại của dũng.

• markSupported(): Trả về giỏ trị boolean chỉ ra rằng dũng cú hỗ trợ cỏc khả năng mark và reset hay khụng. Nú trả về true nếu dũng hỗ trợ ngược lại trả về false. • reset(): Phương thức này định vị lại dũng theo vị trớ được đỏnh lần cuối cựng. Nú

gõy ra ngoại lệ IOException nếu lỗi xảy ra.

• skip(): Phương thức này bỏ qua ‘n’ byte dũng vào. ’-n’ chỉ định số byte được bỏ qua. Nú gõy ra ngoại lệ IOException nếu lỗi xảy ra. Phương thức này sử dụng để di chuyển tới vị trớ đặc biệt bờn trong dũng vào.

III. Lớp OutputStream

Là lớp trừu tượng định nghĩa cỏch ghi cỏc kết xuất đến dũng. Nú cung cấp một tập cỏc phương thức trợ giỳp tạo ra, ghi và xử lý kết xuất cỏc dũng. Cỏc phương thức bao gồm:

• write(int): Phương thức này ghi một byte.

• write(byte[]): Phương thức này phong toả cho đến khi một byte được ghi. Dũng phải chờ cho đến khi tỏc vụ ghi hoàn tất. Nú gõy ra ngoại lệ IOException nếu lỗi xảy ra.

• write(byte[], int, int): Phương thức này ghi mảng cỏc byte. Lớp OutputStream định nghĩa ba dạng khỏc nhau của phương thức để cú thể ghi một byte riờng lẻ, một mảng cỏc byte, hay một đoạn của một mảng byte.

• flush(): Phương thức này xả sạch dũng. Đệm dữ liệu được ghi ra dũng. Nú kớch hoạt IOException nếu lỗi xảy ra.

• close(): Phương thức đúng dũng. Nú được dựng để giải phúng mọi tài nguyờn gắn với dũng. Nú kớch hoạt IOException nếu lỗi xảy ra.

IV. Lớp FileInputStream

Kế thừa từ InputStream, lớp này cho phộp đọc vào từ một tập tin dưới dạng một stream. Cỏc đối tượng của lớp này được tạo ra nhờ đường dẫn tới file, đối tượng File, hoặc đối tượng FileDescriptor làm một đối số.

Lớp này cú 3 phương thức khởi tạo sau:

• FileInputStream(String name): Tham số là tờn của tập tin để tạo luồng. • FileInputStream(File f): Tham số là đối tượng file để tạo luồng.

• FileInputStream(FileDescriptor fdObj): Tham số là đối tượng FileDescriptor để tạo luồng.

Vớ dụ:

InputStream in = new FileInputStream(“C:\\LETI\\JAVA\\Account.txt”);

V. Lớp FileOutputStream

Lớp này cung cấp khả năng ghi dữ liệu xuống tập tin, được dẫn xuất từ lớp cha OutputStream.

Cú 3 phương thức khởi tạo:

• FileOutputStream(String name); • FileOutputStream(File f);

• FileOutputStream(FileDescriptor fdObj)

VI. Lớp File

Lớp này được sử dụng để truy cập cỏc đối tượng tập tin và thư mục. Cỏc tập tin đặt tờn theo qui ước đặt tờn tập tin của hệ điều hành. Lớp này cung cấp cỏc phương thức thiết lập cỏc tập tin và cỏc thư mục. Tất cả cỏc thao tỏc thư mục và tập tin được thực hiện thụng qua cỏc phương thức của lớp File. Như vậy, ta dựng File trong tất cả cỏc thao tỏc quản lý file và thư mục.

• File(String path);

• File(String path, String name); • File(File dir, String name);

Vớ dụ:File f = new File("C:\jdk1.4\bin\hello.java"); hoặc

File f = new File("C:\jdk1.4\bin", "hello.java"); hoặc

File curDir = new File(".");

File f = new File(curDir, "Hello.java"); Cỏc phương thức:

• public String getName(): lấy tờn đối tượng tập tin. • public String gePath(): lấy đường dẫn của tập tin.

• public String getAbsolutePath(): lấy đường dẫn tuyệt đối của tập tin. • public String getParent(): lấy tờn thư mục cha.

• public Boolean createNewFile(): tạo một tập tin mới.

• public void createTempFile(String pattern, File dir): tạo tập tin tạm thời. • public void deleteOnExit(): yờu cầu xoỏ tập tin khi chương trỡnh chấm dứt. • public boolean canWrite(): cho biết tin cú cho phộp ghi hay khụng (true nếu cú). • public boolean canRead(): cho biết tập tin được phộp đọc hay khụng (true nếu cú) • public void setReadOnly(): đặt thuộc tớnh chỉ đọc.

• public boolean isFile(): cho biết tệp tin cú hợp lệ hay khụng (true nếu cú).

• public boolean isDirectory(): cho biết tập tin cú phải thư mục hay khụng (true nếu cú).

• public boolean isHidden(): kiểm tra xem tập tin cú ẩn hay khụng (true nếu cú). • public long length(): cho biết kớch thước tập tin (byte).

• public boolean mkdir(): tạo một thư mục từ đối tượng file, true nếu thành cụng. • renameTo(File dest): đổi tờn tập tin hiện tại sang tờn mới.

• public String[ ] list(): lấy danh sỏch cỏc tập tin và thư mục.

• public String[ ] list(FilenameFilter filter): lấy danh sỏch tập tin thoả món điều kiện lọc, vớ dụ *.gif.

• public booean delete(): xoỏ tập tin, true nếu xoỏ thành cụng. • public String toString(): trả về đường dẫn của tập tin.

• public String toURL(): trả về đối tượng URL tương ứng với tập tin. Chương trỡnh vớ dụ:

public class Test {

public static void main(String args[]) {

File f = new File("test");

System.out.println(f.getAbsolutePath()); // Lấy đường dẫn tuyệt đối System.out.println(f.exists()); // Kiểm tra sự tồn tại

} }

VII. Nhập xuất lọc

Là một kiểu dũng cú được từ việc thay đổi cỏch xử lý dũng hiện cú. Cỏc lớp, cỏc dũng nhập xuất lọc của java sẽ giỳp ta lọc vào/ra theo một số cỏch.

Bộ lọc nằm giữa một dũng nhập và một dũng xuất. Nú thực hiện xử lý một quỏ trỡnh nào đú trờn cỏc byte được truyền từ đầu vào đến đầu ra.

Cỏc bộ lọc cú thể ghộp với nhau khi đú đầu ra của bộ lọc này trở thành đầu vào của bộ lọc kia.

VII.1 Lớp FilterInputStream:

Đõy là lớp trừu tượng. Nú là cha của tất cả cỏc lớp dũng nhập lọc. Một dũng cú thể được đọc và đưa kết quả cho một dũng khỏc.

Lớp FilterInputStream được thiết kế sao cho cú khả năng kết chuỗi nhiều bộ lọc. Để thực hiện điều này chỳng ta dựng vài tầng lồng nhau.

VII.2 Lớp FilterOutputStream

Lớp này là một dạng bổ trợ cho lớp FilterInputStream. Nú là lớp cha của tất cả cỏc lớp dũng xuất lọc. Dữ liệu ghi vào lớp này cú thể sửa đổi theo nhu cầu để thực hiện tỏc vụ lọc và sau đú được chuyển tới đối tượng OutputStream.

VIII. Vào/ra cú sử dụng bộ đệm

Vựng đệm là kho lưu trữ dữ liệu. Chỳng ta cú thể lấy dữ liệu từ vựng đệm thay vỡ quay trở lại nguồn ban đầu của dữ liệu.

Java sử dụng cơ chế nhập/xuất cú lập vựng đệm để tạm thời lập cache dữ liệu vào/ra của một dũng. Nú giỳp chương trỡnh đọc/ghi lượng dữ liệu nhỏ khụng ảnh hưởng lớn đến hiệu năng chung của hệ thống.

VIII.1 Lớp BufferedInputStream:

Lớp này tự động tạo ra và duy trỡ vựng đệm để hỗ trợ thao tỏc vào. Nhờ đú chương trỡnh cú thể đọc dữ liệu từ dũng từng byte một mà khụng ảnh hưởng đến tốc độ thực hiện của hệ thống.

VIII.2 Lớp BufferedOutputStream

Lớp này định nghĩa hai phương thức thiết lập, một cho phộp chỉ định kớch cỡ của vựng đệm xuất, một sử dụng kớch cỡ vựng đệm ngầm định. Lớp này định nghĩa chồng tất cả cỏc phương thức của OutputStream và khụng đưa thờm bất kỡ phương thức mới nào.

Chương trỡnh sau đõy đọc và ghi thụng tin của đối tượng SinhVien theo một format, mỗi sinh viờn nằm trờn một dũng trong file:

// Ke thua lop People import java.io.*;

import java.util.StringTokenizer; public class SinhVien extends People {

private String Lop;// Ten lop

private double DiemTongKet; // Diem tong ket public final String mauda ="vang";//Hang so private int ID;// Ma so SinhVien

protected static int MaSo;// ma so chung de cap phat cho moi sinh vien public SinhVien(int ns,String ht,String l,double dtk)

{

super(ns,ht);//goi constructor cua lop cha la People Lop = l;

DiemTongKet=dtk;

// Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop ID=MaSo;

// Tang ma so len 1 den gan cho SinhVien sau MaSo+=1;

}

// Phuong thuc tinh tuoi protected int TinhTuoi() {

java.util.Date homnay = new java.util.Date(); return (homnay.getYear() - NamSinh +1); }

// Khai bao chong phuong thuc toString() public String toString()

{ return String.valueOf(ID)+ "|" + String.valueOf(this.TinhTuoi()) + "|" + String.valueOf(DiemTongKet)+"|" + HoVaTen; }

// Ghi thụng tin sinh viờn vào file

public void GhiData(PrintWriter out) throws IOException {

out.println(this.toString()); }

// Đọc thụng tin 1 sinh viờn từ bộ đệm đọc

public void DocData(BufferedReader in) throws IOException {

String s = in.readLine(); // Đọc một dũng trong bộ đệm StringTokenizer t = new StringTokenizer(s, "|"); MaSo = Integer.parseInt(t.nextToken()); NamSinh = Integer.parseInt(t.nextToken()); DiemTongKet = Double.parseDouble(t.nextToken()); HoVaTen = t.nextToken(); } // Ham main

public static void main(String[] argv) {

// Dat gia trị bien static, sinh vien dau tien co ma so 1 SinhVien.MaSo=1;

// bien doi tuong Vector lưu cỏc sinh viờn

java.util.Vector sv = new java.util.Vector(5);

SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5); sv.addElement(k1); // Them sinh vien vao Vector

SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6); sv.addElement(k2);

SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7); sv.addElement(k3);

SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8); sv.addElement(k4);

SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9); sv.addElement(k5);

// Dung interface Enumeration de duyet cac phan tu cua Vector java.util.Enumeration enu = sv.elements();

try {

PrintWriter out = new PrintWriter(new FileWriter("C:\\LETI\\JAVA\\Sinhvien.dat")); while (enu.hasMoreElements())

{

// Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc SinhVien g = (SinhVien)enu.nextElement(); g.GhiData(out); } out.close(); } catch(Exception ep) {} // Doc tu file ra

SinhVien[] svs = new SinhVien[5]; try

{

BufferedReader in = new BufferedReader(new FileReader("C:\\LETI\\JAVA\\Sinhvien.dat"));

for(int i=0;i<svs.length;i++) {

svs[i] = new SinhVien(0,"","",0.0); svs[i].DocData(in); } } catch(IOException ep) {} for(int i=0;i<svs.length;i++) System.out.println(svs[i].toString()); }} IX. Lớp RandomAccessFile

Lớp RandomAccessFile cung cấp khả năng thực hiện vào/ra theo một vị trớ cụ thể bờn trong một tập tin. Trong lớp này, dữ liệu cú thể đọc hoặc ghi ở vị trớ ngẫu nhiờn thay vỡ liờn tục.

Lớp RandomAccessFile thực hiện cả hai việc nhập và xuất. Do võy, cú thể thực hiện I/O bằng cỏc kiểu dữ liệu nguyờn thuỷ. Lớp này cũng hỗ trợ cỏc quyền cơ bản về đọc hoặc ghi tập tin, điều này cho phộp đọc tập tin theo chế độ chỉ đọc hoặc đọc-ghi.

Đối tượng thuộc lớp RandomAccessFile cú thể được khởi tạo theo hai cỏch: • RandomAccessFile(String name, String mode);

• RandomAccessFile(File f, String mode); Trong đú mode là chế độ mở tập tin:

mode = "r" - chế độ chỉ đọc. mode = "rw" - chế độ ghi và đọc. Vớ dụ:

RandomAccessFile file = new RandomAccessFile(“C:\\LETI\\JAVA\\Account.txt”, "r"); Lớp này hỗ trợ một số phương thức mới khỏc với phương thức đó thừa kế từ cỏc lớp DataInput và DataOutput.

Cỏc phương thức mới thờm vào bao gồm:

• seek( ): Thiết lập con trỏ tập tin tới vị trớ cụ thể bờn trong tập tin. • getFilePointer( ): Trả về vị trớ hiện hành của con trỏ tập tin. • length( ): Trả về chiều dài của tập tin tớnh theo byte.

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