Core Java - Luồng I/O

Mục tiêu của môn học

Kết thúc chương, bạn có có thể:

¾ Đềcập đến các khái niệm vềluồng

¾ Mô tảcác lớp InputStream và OutputStream

¾ Mô tảI/O mảng Byte

¾ Thực hiện các tác vụ đệm I/O và lọc

¾ Dùng lớp RandomAccesFile.

¾ Mô tảcác tác vụchuỗi I/O và ký tự

¾ Dùng lớp PrinterWriter

pdf19 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2588 | Lượt tải: 2download
Tóm tắt nội dung Core Java - Luồng I/O, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
riter ost = new StringWriter( ); 
.String s = "Welcome to String Input Output Program"; 
for(int i= 0; i <s.length( ); + +i) 
ost.write(s.charAt(i)) ; 
System.out.println("Output Stream is: " + ost); 
StringReader inst; 
inst = new StringReader(ost.toString( )); 
int a= 0; 
StringBuffer sb1 = new StringBuffer(" "); 
while((a = inst.read( )) ! = -1) 
sb1.append((char) a); 
s = sb1.toString( ); , 
System.out.println("No of characters read: " +s.length( )); 
System.out.println("They are: " + s); 
 } 
} 
Hình 9.5 Hiện kết xuất chương trình: 
Hình 9.5 Nhập và xuất sâu chuỗi 
9.3.9 Lớp PrinterWriter 
Lớp ‘PrintStream’ thực hiện việc kết xuất dữ liệu. Lớp này có các phương thức bổ sung, 
trợ giúp cho việc in ấn dữ liệu cơ bản. 
Lớp PrinterWriter’ là một thay thể của lớp PrinterStream. Nó thực tế cải thiện lớp 
PrinterStream bằng cách dùng dấu tách dòng phụ thuộc nền tảng để in các dòng thay vì 
77 
ký tự ‘\n’. Lớp này cũng cấp hỗ trợ các ký tự Unicode so với PrinterStream. Phương thức 
‘checkError( )’ được sử dụng kiểm tra kết xuất được xả sạch và và được kiểm ra các lỗi. 
Phương thức setError( ) được sử dụng để thiết lập lỗi điều kiện. Lớp PrintWriter cung cấp 
việc hỗ trợ in ấn các kiểu dữ liệu nguyên thuỷ, các mảng ký tự, các sâu chuỗi và các đối 
tượng. 
9.3.10 Giao diện DataInput 
Giao diện DataInput được sử dụng để đọc các byte từ luồng nhị phân và xây dựng lại các 
kiểu dữ liệu dạng nguyên thuỷ trong Java. 
DataInput cũng cho phép chúng ta chuyển đổi dữ liệu từ định dạng sửa đổi UTF-8 tới 
dạng sâu chuỗi. Chuẩn UTF cho định dạng chuyển đổi Unicode. Nó là kiểu định dạng đặt 
biệt giải mã các giá trị Unicode 16 bit . UTF lạc quan ở mức thấp giả lập trong hầu hết 
các trường hợp, mức cao 8 bít Unicode sẽ là 0. Giao diện DataInput được định nghĩa là 
số các phương thức, các phương thức bao gồm việc đọc các kiểu dữ liệu nguyên thuỷ 
trong java. 
Bảng 9.3 tóm lượt vài phương thức. Tất cả các phương thức được kính hoạt IOException 
trong trường hợp lỗi: 
Tên phương thức Mô tả 
boolean readBoolean( ) Đọc một byte nhập, và trả về đúng nếu byte 
đó không phải là 0, và sai nếu byte đó là 0. 
byte readByte( ) Đọc một byte 
char readChar( ) Đọc và trả về một giá trị ký tự 
short redShort( ) Đọc 2 byte và trả về giá trị short 
long readLong( ) Đọc 8 byte và trả về giá trị long. 
float readFloat( ) đọc 4 byte và trả về giá trị float 
int readInt( ) Đọc 4 byte và trả về giá trị int 
double readDouble( ) Đọc 8 byte và trả về giá trị double 
String readUTF( ) Đọc một sâu chuỗi 
String readLine( ) Đọc một dòng văn bản 
Bảng 9.3 Các phương thức của giao diện DataInput 
9.3.11 Giao diện DataOutput 
Giao diện DataOutput được sử dụng để xây dựng lại các kiểu dữ liệu nguyên thuỷ trong 
java vào trong dãy các byte. nó ghi các byte này lên trên luồng nhị phân. 
Giao diện DataOutput cũng cho phép chúng ta chuyển đổi một sâu chuỗi vào trong java 
được sửa đổi theo định dạng UTF-8 và ghi nó vào luồng. 
Giao diện DataOutput định nghĩa số phương thức được tóm tắt trong bảng 9.4. Tất cả các 
phương thức sẽ kích hoạt IOException trong trường hợp lỗi. 
Tên phương thức Mô tả 
void writeBoolean(Boolean b) Ghi một giá trị Boolean vào luồng 
78 
void writeByte(int value) Ghi giá trị 8 bit thấp 
void writeChar(int value) Ghi 2 byte giá trị kiểu ký tự vào luồng 
void writeShort(int value) Ghi 2 byte, biểu diễn lại giá trị dạng short 
void writeLong(long value) Ghi 8 byte, biểu diễn lại giá trị dạng long 
void writeFloat(float value) Ghi 4 byte, biểu diễn lại giá trị dạng float 
void writeInt(int value) ghi 4 byte 
void writeDouble(double value) Ghi 8 byte, biểu diễn lại giá trị dạng double 
void writeUTF(String value) Ghi một sâu dạng UTF tới luồng. 
Bảng 9.4 Các phương thức của giao diện DataOutput 
9.3.12 Lớp RandomAccessFile 
Lớp RandomAccessFile cung cấp khả năng thực hiện I/O 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 bên trong một 
tập tin thay vì một kho lưu trữ thông tin liên tục. hơn thế nữa lớp này có tên 
RandomAccess. Phương thưc ‘seek( )’ hỗ trợ truy cập ngẫu nhiên. Kết quả là, biến trỏ 
tương ứng với tạp tin hiện hành có thể ấn định theo vị trí bất kỳ trong tập tin. 
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ợ cho phép đọc hoặc ghi tập tin cơ 
bản, điều này cho phép đọc tập tin theo chế độ chỉ đọc hoặc đọc-ghi. tham số ‘r’ hoặc 
‘rw’ được gán cho lớp RandomAccessFile chỉ định truy cập ‘chỉ đọc’ và ‘đọc-ghi’. Lớp 
này giới thiệu vài phương thức mới khác với phương pháp đã thừa kế từ các lớp 
DataInput và DataOutput. 
Các phương thức 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. 
Chương trình dưới đây minh hoạ cách dùng lớp RandomAccessFile. Nó ghi một giá trị 
boolean, một int, một char, một double tới một file có tên ‘abc.txt’. Nó sử dụng phương 
pháp seek( ) để tìm vị trí định vị 1 bên trong tập tin. Sau đó nó đọc giá trị số nguyên, ký 
tự và double từ tập tin và hiển thị chúng ra màn hình. 
 Chương trình 9.6 
import java.lang.System; 
import java.io.RandomAccessFile; 
import java.io.IOException; 
public class mdexam 
{ 
 public static void main (String args[ ]) throws IOException 
 { 
79 
RandomAccessFile rf; 
rf= new RandomAccessFile("abc.txt", "rw"); 
rf. writeBoolean(true); 
rf. writelnt( 67868) ; 
rf.writeChars("J"); 
rf. writeDouble(678.68); 
/ / making use of seek( ) method to move to a specific file location 
rf.seek(l); 
System.out.println(rf.readlnt( )); 
System.out.println(rf.readChar( )); 
System.out.println(rf.readDouble( )); 
rf.seek(0); 
System.out.println(rf.readBoolean( )); 
rf.close( ); 
 } 
 } 
Hình 9.5 Hiện kết xuất chương trình: 
Hình 9.6: Lớp RandomAccessFile 
9.4Gói java.awt.print 
Đây là gói mới mà java JDK 1.2 cung cấp. Nó thay thế khả năng in của JDK 1.1. Nó bao 
gồm dãy các giao diện: 
¾ Pageable 
¾ Printable 
¾ PrinterGraphics 
Giao diện ‘Pageable’ định nghĩa các phương thức được sử dụng cho đối tượng mô tả lại 
các trang sẽ được in. Nó cũng chỉ định số lượng trang sẽ được in cũng như sẽ được in 
trang hiện hành hay một miền trang. 
Giao diện ‘Printable’ chỉ định phương thức print( )được dùng để in một trạng trên một 
đối tượng Graphics. 
Giao diện ‘PrinterGraphics‘ cung cấp khả năng truy cập đối tượng ‘PrinterJob’. Nó cung 
cấp các lớp sau đây: 
¾ Paper 
¾ Book 
¾ PageFormat 
80 
¾ Printerjob 
Lớp ‘Page’ định nghĩa các đặc tính vật lý của giấy in. Ngoài ra nó cũng cung cấp khổ 
giấy và vùng vẽ. 
Lớp ‘Book’ là một lớp con của đối tượng duy trì một danh sách các trang in. Lớp này 
cũng cung cấp các phương thức để bổ sung và quản lý các trang cũng như thực thi giao 
diện Pageable. 
Lớp ‘PageFormat’ định nghĩa lề của trang như các lề ‘Top’, ‘Bottom’,’Left’ và ‘Right’. 
Nó cũng chỉ định kích cỡ và hướng in như ‘Portait’ (khổ dọc) hoặc ‘Landscape’ (khổ 
ngang). 
Lớp ‘Printerjob’ là một lớp con của đối lượng khởi tạo, quản lý, và điều khiển yêu cầu 
máy in. Lớp này cũng chỉ định các tính chất in. 
Dưới đây là ngoại lệ và lỗi mà gói java.awt.print kích hoạt: 
¾ PrinterException 
¾ PrinterIOException 
¾ PrinterAbortException 
‘PrinterException‘ mở rộng lớp java.lang.Exception nhằm cung cấp một lớp cơ sở để in 
các ngoại lệ liên quan. 
‘PrinterIOException’ mở rộng lớp ‘PrinterException’ nêu rõ một lỗi trong I/O. 
‘PrinterAbortException’ là lớp con của lớp PrinterException nêu rõ khối in đã được bỏ 
ngang. 
81 
Tóm tắt buổi học 
¾ Một luồng là một lộ trình qua đó dữ liệu di chuyển trong một chương trình java. 
¾ Khi một luồng dữ liệu được gửi hoặc nhận.Chung ta xem nó như đang ghi và đọc 
một luồng theo thứ tự nêu trên. 
¾ Luồng nhập/xuất bao gồm các lớp sau đây: 
o Lớp System.out 
o Lớp System.in 
o Lớp System.err 
¾ Lớp InputStream là một lớp trừu tượng định nghĩa cách nhận dữ liệu. 
¾ Lớp OutputStream cũng là lớp trừu tượng. Nó định nghĩa ghi ra các luồng được 
kết xuất như thế nào. 
¾ Lớp ByteArrayInputStream tạo ra một luồng nhập từ vùng đệm bộ nhớ trong khi 
ByteArrayOutputStream tạo một luồng xuất trên một mãng byte. 
¾ Java hổ trợ tác vụ nhập/xuất tập tin với sự trợ giúp của các File, FileDescriptor, 
FileInputStream và FileOutputStream. 
¾ Các lớp Reader và Writer là lớp trừu tượng hỗ trợ đọc và ghi các luồng ký tự 
Unicode. 
¾ CharArrayReader, CharArrayWriter khác với ByteArrayInputStream, 
ByteArrayOutputStream hỗ trợ định dạng nhập/xuất 8 bit, Trong khi 
ByteArrayInputStream, ByteArrayOutputStream hỗ trợ nhập/xuất 16bit. 
¾ Lớp PrintStream thực thi một kết xuất. lớp này có phương thức bổ sung, giúp ta in 
các kiểu dữ liệu cơ bản. 
¾ Lớp RandomAccessFile cung cấp khả năng thực hiện I/O tới vị trí cụ thể trong 
một tập tin. 
82 
Kiểm tra mức độ tiến bộ 
1. ---------- là các dàn ống (pipelines) để gửi và nhận thông tin trong các chương 
trình java. 
2. ----------- là luồng lỗi chuẩn. 
3. Phương thức ------------- đọc các byte dữ liệu từ một luồng. 
4. Phương thức ------------- trả về giá trị boolean, nêu rõ luồng có hỗ trợ các khả 
năng mark và reset hay không. 
5. Phương thức ------------ xả sạch luồng. 
6. Nhập/xuất mảng byte sử dụng các lớp ------------ và --------------------- 
7. Lớp --------------- được sử dụng truy cập các đối tượng thư mục và tập tin. 
8. --------------là một khi chưa để lưu giữ dữ liệu. 
83 
Bài tập 
1. Viết chương trình nhận một dòng văn bản từ người dùng và hiển thị đoạn văn bản 
đó lên màn hình. 
2. Viết chương trình sao chép nội dụng một tập tin tới tập tin khác. 
3. Viết chương trình tạo ra một tập tin truy cập ngẫu nhiên. kết xuất hiển thị phía 
dưới đây. 
Các bản ghi nên được lưu ở dạng tập tin ‘.dat’, vì vậy người dùng truy cập chúng 
nhanh hơn. 

File đính kèm:

  • pdfUnlock-CoreJava_C9.pdf
Tài liệu liên quan