Bài giảng Lập trình Java - Chương 5: Input - Output trong Java

Mục tiêu

1. Hiểu khái niệm về dòng.

2. Biết các lớp ñảm nhiệm việc việc xuất nhập dữ

liệu trong Java.

3. Biết cách sử dụng các lớp io ñể xuất nhập dữ

liệu với màn hình và bàn phím.

4. Biết cách xuất nhập dữ liệu với tập tin văn bản,

tập tin chứa các dữ liệu thuộc kiểu cơ bản, tập

tin chứa dữ liệu là các ñối tượng.

5. Biết các interface và các lớp quản lý việc in ấn.

pdf44 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 3425 | Lượt tải: 4download
Tóm tắt nội dung Bài giảng Lập trình Java - Chương 5: Input - Output trong Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ảm nhiệm công việc nhập
xuất có lọc dữ liệu (nhập xuất có ñiều kiện)
• Là các lớp cha của các lớp dòng nhập xuất có bộ lọc
khác
22
10.3.7- BufferedInputStream và BufferedOutputStream
• Buffer: Bộ nhớ ñệm của qúa trình ñọc ghi dữ liệu
với các dòng nhập xuất nhằm tăng hiệu qủa quá
trình ñọc ghi dữ liệu (ñọc ghi theo khối lớn thay vì
theo từng byte). Chúng ta có thể lấy dữ liệu từ
buffer thay vì từ nguồn dữ liệu. 
• Đây là hai lớp quản lý nhập xuất dữ liệu có ñệm .
• Bàn phím là 1 thiết bị nhập có ñệm.
• Màn hình là 1 thiết bị xuất có ñệm.
• Lớp tự hiện thực dòng nhập xuất chuẩn (bàn phím, 
màn hình) thường là lớp con của 2 lớp này.
Lớp BufferInputStream
23
Lớp BufferOutputStream
10.3.8- DataInput interface và DataOutput interface
DataInputStream và DataOutputStream
• DataInput interface ñược dùng ñể
ñọc các byte nhị phân từ 1 dòng
byte vật lý (InputStream) và xây
dựng lại các byte này thành các dữ
liệu có kiểu cơ bản (primitive data 
types). Inteface này cũng chuyển
ñổi chuỗi dạng UTF-8 có sửa ñổi
thành dữ liệu dạng String .
• DataOutput interface lại làm ngược
lại những gì mà DataInput interface 
ñã làm.
• Hai interface này ñược 2 lớp
DataInputStream và
DataOutputStream hiện thực.
24
DataInput interface
DataOutput interface
25
Minh họa về sử dụng
DataInputStream và DataOutputStream
10.3.9- Interface ObjectInput và ObjectOutput
• Là 2 interface con của
DataInput và DataOutput
interfaces cho việc nhập
xuất ñối tượng.
• Hai lớp
ObjectInputStream và
ObjectOutputStream hiện
thực 2 interface này. 
26
public interface 
ObjectInput extends 
DataInput
public class 
ObjectInputStream
extends InputStream
implements ObjectInput, 
ObjectStreamConstants
Các hành vi ñọc dữ
liệu thuộc kiểu cơ bản
Đọc object từ stream
public interface 
ObjectOutput extends 
DataInput
public class 
ObjectOutputStream
extends OutputStream
implements ObjectOutput, 
ObjectStreamConstants
Các hành vi ghi dữ liệu
thuộc kiểu cơ bản
Ghi object vào stream
27
Để ñọc ghi object với stream
• class của object phải implements interface 
Serializable ñể thống nhất cách ñọc ghi object 
của hai tác vụ readObject và writeObject.
• Việc ñồng bộ cơ chế ñọc ghi ñối tượng thông
qua hành vi toString(), tuần tự hóa dữ liệu của
ñối tượng.
Minh họa ObjectInputStream và ObjectOutputStream
implements Serializable ñể
ñồng bộ 2 quá trình ñọc ghi ñối
tượng với stream
Các tác vụ chỉnh
dạng giúp xuất
dữ liệu cho ñẹp
Lớp mô tả cho 1 cuốn sách
28
Minh họa ObjectInputStream và ObjectOutputStream
Lớp mô tả cho 1 tập
các cuốn sách
Kiểm tra sự tồn tại
của 1 sách với mã số
ñã biết
Thêm 1 cuốn sách
Thêm các cuốn sách
từ 1 file
Ghi tập các cuốn sách
lên 1 file
Xuất tập các cuốn
sách ra màn hình
Minh họa ObjectInputStream và ObjectOutputStream
Lớp cho chương trình chính Kết qủa
Nếu bỏ implements Serializable trong class SACH
29
10.3.10- Các dòng trừu tượng cho ký tự
Reader , Writer
• Đơn vị xử lý trong dòng là ký tự  2 byte.
public abstract class Reader extends Object
implements Readable, Closeable
public abstract class Writer extends Object
implements Appendable, Closeable, Flushable
• Các lớp con của Writer chỉ cần override 
write(char[], int, int), flush(), và close() 
• Các lớp con của Reader chỉ cần override 
read(char[], int, int) và close(). 
• Có thể overide thêm các methods khác hoặc
thêm methods nếu muốn. 
Các lớp dẫn xuất
30
Reader class
skip(long n) - bỏ qua n ký tựlong
reset() : Reset dòng về vị trí ñánh dấu cuối cùng nếu cóvoid
ready() - Kiểm tra dòng có sẵn sàng ñể ñọc hay ñang bị khóaboolean
read(CharBuffer target) Đọc các ký tự ñưa vào buffer, trả về số ký tự ñã ñọc ñược (-1 
khi hết dòng)
int
read(char[] cbuf, int off, int len)
Đọc len ký tự lưu vào mảng cbuf từ vị trí off .Trả về số ký tự ñã ñọc ñược (-1 khi hết
dòng)
abstract int
read(char[] cbuf) : Đọc 1 mảng ký tự, trả về ñọc ñược (-1 khi khi hết dòng)int
read() - Đọc 1 ký tự từ dòngint
markSupported() : Kiểm tra dòng có hỗ trợ tác vụ ñánh dấu?boolean
mark(int readAheadLimit) – Đánh dấu vị trí hiện hànhvoid
close() – Đóng dòngabstract void
Reader(Object lock) : Tạo dòng nhập với ñối tượng ñồng bộ ñã cóprotected 
Reader() , contructor tạo 1 dòng nhập ký tự có cơ chế ñồng bộprotected 
lock : Field ñược dùng ñể ñồng bộ các tác vụ của dòngprotected Object
class Reader Summary - throws IOException
class Writer
write(char[] cbuf)void
flush() Flush the stream.abstract void
close() Close the stream, flushing it first.abstract void
append(CharSequence csq, int start, int end) Appends a 
subsequence of the specified character sequence to this writer.
Writer
append(CharSequence csq)
Appends the specified character sequence to this writer.
Writer
append(char c) Appends the specified character to this writer.Writer
Writer(Object lock) Create a new character-stream writer whose 
critical sections will synchronize on the given object.
protected 
Writer() Create a new character-stream writer whose critical sections will 
synchronize on the writer itself.
protected 
lock (filed) The object used to synchronize operations on this stream.protected Object
Class Writer Summary
31
10.3.11- Lớp BufferedReader và BufferedWriter
• Dòng nhập/xuất ký tự có sử dụng bộ ñệm
• Giúp nhập xuất dữ liệu theo dạng ký tự, 
dòng (line) ký tự.
Lớp BufferedReader
32
Lớp BufferedWriter
10.3.12- Lớp InputStreamReader
Lớp OutputStreamReader
• Các lớp cầu nối giữa dòng vật lý và dòng ký tự.
• InputStreamReader sẽ ñọc các byte vật lý rồi
chuyển thành các ký tự.
• OutputStreamWriter sẽ ghi các ký tự thành byte 
vật lý
• Thường ñược dùng cho bàn phím và màn hình
vì ñây là các thiết bị ký tự, khi xuất nhập 1 số
(byte vật lý) CẦN CÓ SỰ CHUYỂN ĐỔI BYTE 
VẬT LÝ  KÝ TỰ
33
Sử dụng kết hợp ñể có hiệu qủa
Khai báo dòng nhập là bàn phím: 
Gói InputStreamReader trong BufferedReader
BufferedReader in = new BufferedReader(new
InputStream(System.in)); 
Khai báo dòng xuất là màn hình: 
Gói OutputStreamWriter trong BufferedWriter
Writer out = new BufferedWriter(new
OutputStreamWriter(System.out)); 
Lớp InputStreamReader
34
Lớp OutputStreamWriter
Minh họa tự xây dựng một lớp nhập
dữ liệu từ bàn phím (xuất dữ liiệu ñã có
System.out.print(...)
import java.io.*;
class MyIO
{ static int ReadInt () throws java.io.IOException
{ int n=0;
BufferedReader Obj = new BufferedReader(new
InputStreamReader(System.in));
try 
{ n= Integer.parseInt(Obj.readLine()); }
catch (Exception e) 
{ System.err.println(e.toString()); System.exit(0); } 
return n;
}
35
static char ReadChar () throws java.io.IOException
{ char x=0;
Reader Obj = new InputStreamReader(System.in);
try { x= (char) Obj.read(); }
catch (Exception e) { System.err.println(e.toString()); System.exit(0); } 
return x;
}
static int ReadCharCode () throws java.io.IOException
{ return System.in.read(); }
static String ReadString () throws java.io.IOException
{ String s;
BufferedReader Obj = new BufferedReader(new
InputStreamReader(System.in));
s=Obj.readLine();
while (s.length()==0) s=Obj.readLine();
return s;
}
}
10.3.13- Lớp FileReader và FileWriter
• Là các lớp con của lớp InputStreamReader và
OutputStreamWriter tương ứng nên thừa kế
cac1 khả năng về chuyển ñổi ký tự  byte
• Giúp truy cập file
36
Lớp FileReader
Lớp FileWriter
37
10.3.14- Lớp CharArrayReader và
Lớp CharArrayWriter
• Hiện thực 1 mảng ký tự (character buffer) 
cho việc nhập xuất.
public class CharArrayReader extends Reader
public class CharArrayWriter extends Writer
public class CharArrayReader extends Reader
38
public class CharArrayWriter extends Reader
10.3.15- Lớp StringReader và StringWriter
• Dòng nhập xuất thông qua String
39
public class StringReader extends Reader
public class StringWriter extends Writer
40
10.3.16- public class PrintWriter extends Writer
• Làm nhiệm vụ xuất dữ liệu cơ bản, biểu diễn của ñối
tượng có ñịnh dạng ra một dòng xuất ký tự.
Lớp PrintWriter
void print (x) ; 
void println(x) 
với x là dữ liệu
cơ bản hoặc
ñối tượng, 
String
41
10.4- Gói java.lang và lớp System
• Gói java.lang là gói cơ bản của ngôn ngữ Java 
(language).
• Gói này chứa khai báo các lớp wrapper như
Boolean, Char, Integer,...
• Có lớp System mô tả cho hệ thống
subclasses:
Gói java.lang
42
public final class System extends Object
• Data
static PrintStream err :mô tả thiết bị xuất lỗi
chuẩn (màn hình)
static PrintStream out :mô tả thiết bị xuất chuẩn
(màn hình)
static PrintStream in :mô tả thiết bị nhập chuẩn
(bàn phím)
• Methods
Các hành vi của lớp System là các hành vi mức
hệ thống như truy xuất thời gian, truy xuất các
thiết lập hệ thống (trong Config.sys), thoát JVM, 
nạp 1 lớp trong 1 file, nạp 1 thư viện, kết thúc 1 
object, thiết lập thiết bị nhập xuất hệ thống khác
với các thiết bị xuất nhập chuẩn, lấy/thiết lập cơ
chế bảo mật…
public final class System extends Object ....
Các method thường dùng:
static long currentTimeMillis() lấy giờ hệ thống
theo millisec so với 12 giờ ñêm ngày 1/1/1970
static long nanoTime() lấy giờ hệ thống theo
nanosec (chỉ có từ Java 1.5.0)
static void exit(int status) kết thúc JVM
static void gc(void) : gọi trình gom rác (garbage 
collector)
static Properties getProperties(void) lấy thiết lập
hệ thống (trong Config.sys)
43
Thí dụ về truy xuất thông tin hệ thống
Gói java.util
chứa lớp
Date
10.5- Thí dụ xuất nhập dữ liệu với tập tin văn bản
• Tự tham khảo trong tài liệu
class WriteFile , 
class IntMatrix
44
10.6 – Tóm tắt
• Gói java.io chứa các lớp cho việc xuất nhập dữ liệu.
• Các dòng xuất nhập ñược chia thành 2 loại: dòng văn
bản, dòng byte vật lý.
• Dòng văn bản xử lý dữ liệu theo từng ký tự 2 byte
• Dòng byte vật lý xử lý dữ liệu theo từng byte.
• Tác vụ nhập xuất có thể gây lỗi runtime nên cần throws 
IOException.
• Khi lưu trữ dữ liệu vào dòng, cần chọn 1 ñịnh dạng lưu
trữ trước ñể khi phải ñọc ra sẽ ñọc ñược ñúng dữ liệu.

File đính kèm:

  • pdfBài giảng Lập trình Java - Chương 5_Input - Output trong Java.pdf
Tài liệu liên quan