Bài giảng Lập trình hướng đối tượng - Chương 7: Nhập xuất trên Java

7.1. Khái niệm về các luồng (Stream) nhập xuất

7.2.Các loại luồng

7.3. Phân cấp các luồng

7.4. Thao tác với các luồng xử lý trong Java

7.5. Lớp File

7.6. Một số ví dụ

 

pptx 49 trang yennguyen 1700
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 7: Nhập xuất trên Java", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình hướng đối tượng - Chương 7: Nhập xuất trên Java

Bài giảng Lập trình hướng đối tượng - Chương 7: Nhập xuất trên Java
Môn: Lập trình Hướng đối tượng(Object Oriented Programming) 
Chương 7. Nhập xuất trên Java 
Nội dung 
7.1. Khái niệm về các luồng (Stream) nhập xuất 
7.2.Các loại luồng 
7.3. Phân cấp các luồng 
7.4. Thao tác với các luồng xử lý trong Java 
7.5. Lớp File 
7.6. Một số ví dụ 
2 
7.1. Khái niệm về các Stream nhập xuất 
Chương trình Java nhận và gửi dữ liệu thông qua các đối tượng là các thực thể thuộc một kiểu luồng dữ liệu nào đó . 
Luồng (stream) là một dòng dữ liệu đến từ một nguồn (source) hoặc đi đến một đích (sink ) 
Nguồn và đích có thể là t ậ p (file), bộ nhớ , một tiến trình (process), hay thiết bị (bàn phím, màn hình , ) , kết nối mạng. 
I/O Stream diễn tả cho một luồng nhập hoặc luồng xuất . 
Luồng nhập (input stream) : Gắn với các thiết bị nhập như bàn phím, máy scan, file 
Luồng xuất (output stream): Gắn với các thiết bị xuất như màn hình, máy in, file 
3 
7.1. Khái niệm về các Stream nhập xuất (tt) 
Luồng hỗ trợ nhiều loại dữ liệu khác nhau : 
byte , 
các ký tự, 
các kiểu dữ liệu cơ sở, 
các đối tượng. 
Gói thư viện hỗ trợ nhập xuất trên Java: java.io .* 
K hi làm việc với luồng, phải bẫy lỗi tường minh lỗi I O E xception bằng khối try - catch. 
4 
7.1. Khái niệm về các Stream nhập xuất (tt) 
Chương trình sử dụng luồng nhập để đọc dữ liệu từ nguồn đưa vào chương trình : 
Chương trình sử dụng luồng xuất để ghi dữ liệu xuống đích. 
5 
7.2.Các loại Stream 
Luồng byte: thao tác theo đơn vị byte : chức năng áp dụng cho dữ liệu dạng nhị phân 
InputStream / OutputStream 
Luồng char: chức năng thao tác với ký tự (cả ký tự Unicode) 
Reader / Writer 
Luồng I/O chuẩn 
Lớp System.out: luồng xuất chuẩn, hiển thị kết quả ra màn hình 
Lớp System.in: luồng nhập chuẩn , đọc dữ liệu từ bàn phím 
Lớp System.err: luồng lỗi chuẩn 
6 
7.2.Các loại Stream (tt) 
Luồng dữ liệu đích (Node streams / Data sink stream): chức năng cơ bản cho việc đọc và ghi từ một vị trí xác định. 
Các loại luồng node gồm: file, bộ nhớ và pipe. 
Luồng lọc (Filter streams / Processing stream ): luồng lọc có khả năng kết nối với các luồng khác và xử lý dữ liệu “theo cách riêng ”. 
 FilterInputStream/FilterOutputStream 
7 
7.3. Phân cấp các luồng 
8 
7.4. Thao tác với các luồng xử lý trong Java 
Thao tác nhập xuất 
Tạo luồng, liên kết luồng với dữ liệu nguồn/đích 
Thao tác trên luồng 
Đóng luồng 
Abstract Classes 
InputStream/OutputStream 
Reader/Writer 
9 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
7.4.1. Byte streams 
7.4.2. Character streams 
7.4.3. Buffered streams 
7.4.4. Standard I/O streams 
7.4.5. Data streams 
7.4.6. Object streams 
10 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng InputStream 
11 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng InputStream (tt) 
12 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng OutputStream 
13 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng OutputStream (tt) 
14 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng Reader 
15 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng Reader (tt) 
16 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng Writer 
17 
7.4. Thao tác với các luồng xử lý trong Java (tt) 
Lớp trừu tượng Writer (tt) 
18 
7.4.1. Byte streams 
19 
7.4.1. Byte streams (tt) 
Lưu ý về luồng Byte 
Luồng byte biểu diễn một loại nhập xuất ở mức thấp mà ta nên tránh. 
Nếu dữ liệu là dữ liệu ký tự, thì phương pháp tốt nhất là sử dụng luồng ký tự. 
Ngoài ra, còn có nhiều luồng khác thích hợp cho những kiểu dữ liệu phức tạp. 
Các luồng byte chỉ nên sử dụng nhập xuất cho các kiểu nhập xuất cơ bản. 
Tất cả các luồng khác đều dựa trên luồng byte. 
20 
7.4.2. Character streams 
Java hỗ trợ đọc và thao tác trên luồng đối với các ký tự Unicode . 
Luồng ký tự (character stream) : Thực hiện các thao tác nhập xuất theo ký tự. 
Tất cả các lớp của luồng ký tự đều được dẫn xuất từ lớp Reader và Writer. 
Các lớp thao tác trên file của luồng ký tự: 
FileReader 
FileWriter. 
21 
7.4.2. Character streams (tt) 
22 
7.4.2. Character streams (tt) 
Luồng ký tự thường là "wrappers" của luồng byte. 
Luồng ký tự sử dụng luồng byte để thực hiện nhập xuất vật lý . Trong khi đó luồng ký tự xử lý chuyển đổi giữa ký tự và byte . 
FileReader dùng FileInputStream 
FileWriter dùng FileOutputStream 
Dùng luồng ký tự có thể thao tác được cho luồng byte. 
Có thể chuyển từ luồng byte sang luồng ký tự nhờ: InputStreamReader và OutputStreamReader. 
23 
7.4.2. Character streams (tt) 
Line-Oriented I/O 
Thông thường nhập xuất trên ký tự thường xảy ra là một chuỗi các ký tự hơn là các ký tự riêng lẻ. 
Thông dụng nhất là một dòng: một chuỗi các ký tự với một tín hiệu kết thúc dòng. 
Tín hiệu kết thúc dòng có thể là \r (carriage-return) hoặc \n (line-feed). 
24 
7.4.2. Character streams (tt) 
Line-Oriented I/O (tt) 
25 
7.4.3. Buffered streams 
Nếu một I/O không có bộ đệm, nghĩa là mỗi yêu cầu đọc hoặc ghi được xử lý trực tiếp trên thiết bị. 
Để giảm các chi phí trên, nền tảng Java hỗ trợ luồng nhập xuất có bộ đệm . 
Luồng nhập có bộ đệm (buffered input stream) đọc dữ liệu từ một vùng nhớ được xem như một bộ đệm ; chỉ ghi vào khi nào bộ đệm rỗng. 
Luồng xuất có bộ đệm (buffered output stream) ghi dữ liệu tới bộ đệm ; chờ cho đến khi bộ đệm đầy mới ghi tới đích . 
26 
7.4.3. Buffered streams (tt) 
Các lớp của luồng đệm 
Một chương trình có thể chuyển một luồng không bộ đệm thành luồng có bộ đệm (buffered stream) . 
Có 4 lớp luồng đệm dùng để “wrap” các luồng không bộ đệm: 
BufferedInputStream và BufferedOutputStream là các luồng byte có bộ đệm. 
BufferedReader và BufferedWriter là các luồng ký tự có bộ đệm. 
27 
7.4.3. Buffered streams (tt) 
Flushing Buffered Streams 
Vài trường hợp dữ liệu không chứa đủ bộ đệm. Vì vậy, phải dùng flush để ghi hết những gì còn lại trong bộ đệm ra. 
Một vài lớp luồng xuất có bộ đệm hỗ trợ autoflush. 
Khi chức năng autoflush được thiết lập, cần phải thiết lập sự kiện cụ thể để bộ đệm ghi ra. 
Ví dụ, autoflush trong đối tượng PrintWriter, bộ đệm ghi ra mỗi khi có lệnh println hoặc format. 
Muốn ghi ra tại thời điểm bất kỳ, ta dùng phương thức flush(). 
28 
7.4.3. Buffered streams (tt) 
29 
7.4.3. Buffered streams (tt) 
30 
7.4.4. Standard I/O streams 
Có 3 luồng chuẩn: 
Luồng nhập chuẩn - System.in 
Luồng xuất chuẩn - System.out 
Luồng xuất lỗi chuẩn - System.err 
System.out, System.err được định nghĩa như các đối tượng PrintStream. 
31 
7.4.4. Standard I/O streams (tt) 
32 
7.4.5. Data streams 
Luồng dữ liệu (data streams) hỗ trợ nhập xuất nhị phân trên các kiểu dữ liệu cơ sở (boolean, char, byte, short, int, long, float, và double) và String. 
Tất cả các luồng dữ liệu hiện thực từ giao diện DataInput hoặc từ DataOutput. 
Hầu hết việc nhập xuất trên luồng dữ liệu thì dùng lớp DataInputStream và DataOutputStream . 
Những dữ liệu được ghi bởi DataOutputStream sẽ đọc được bởi DataInputStream 
33 
7.4.5. Data streams (tt) 
Một số phương thức của DataInputStream 
34 
7.4.5. Data streams (tt) 
Một số phương thức của DataOutputStream 
35 
7.4.5. Data streams (tt) 
36 
7.4.6. Object streams 
Tuần tự hóa dữ liệu 
Tính bền vững (p ersistence ) là khả năng một đối tượng duy trì sự tồn tại độc lập sau thời gian sống của chương trình tạo ra nó. 
Java cung cấp cơ chế được gọi là tuần tự hóa đối tượng (Object Serialization) để tạo đối tượng bền vững. 
Khi một đối tượng được tuần tự hóa, nó sẽ được chuyển thành tuần tự các byte dạng thô, biễu diễn đối tượng. 
37 
7.4.6. Object streams (tt) 
Luồng đối tượng 
Luồng đối tượng (Object Streams) hỗ trợ việc đọc, ghi các đối tượng. 
Nếu đối tượng hiện thực giao diện Serializable th ì ta có thể sử dụng luồng đối tượng để đọc, ghi đối tượng đó. 
Hai lớp hỗ trợ luồng đối tượng: 
ObjectInputStream 
ObjectOutputStream 
Hai lớp này tương ứng hiện thực các giao diện : 
ObjectInput 
ObjectOutput 
38 
7.4.6. Object streams (tt) 
Luồng đối tượng (tt) 
Bất kỳ đối tượng nào mà ta muốn tuần tự hóa (serialize) thì bắt buộc phải hiện thực giao diện Serializable. 
Để tuần tự hóa một đối tượng, gọi phương thức writeObject của lớp ObjectOutputStream . 
Để khôi phục lại đối tượng đã được tuần tự hóa trước đó ( deserialize) , gọi phương thức readObject của lớp ObjectInputStream . 
Các đối tượng được tuần tự hóa có thể được ghi vào file, truyền qua mạng hoặc có thể chuyển sang các luồng khác. 
39 
7.4.6. Object streams (tt) 
40 
7.5. Lớp File 
Lớp File dùng cho việc thao tác trên file và thư mục. 
Tạo đối tượng File 
File myFile; 
myFile = new File(“data.txt”); 
myFile = new File(“myDocs”, “data.txt”); 
Thư mục cũng được coi như là một tập tin 
File myDir = new File(“myDocs”); 
File myFile = new File(myDir, “data.txt”); 
có phương thức riêng để thao tác với thưmục 
41 
7.5. Lớp File (tt) 
Một số phương thức của lớp File : 
Tên tập tin 
String getName() 
String getPath() 
String getAbsolutePath() 
String getParent() 
boolean renameTo(File newName) 
Kiểm tra tập tin 
boolean exists() 
boolean canWrite () , boolean canRead() 
boolean isFile() 
boolean isDirectory() 
boolean isAbsolute ( ) 
42 
7.5. Lớp File (tt) 
Một số phương thức của lớp File (tt): 
Nhận thông tin 
long lastModified() 
long length() 
boolean delete() 
Thư mục 
boolean mkdir() 
String [] list() 
43 
7.6. Một số ví dụ 
Copy file 
44 
7.6. Một số ví dụ (tt) 
Copy file 
45 
7.6. Một số ví dụ (tt) 
Ghi đối tượng 
46 
7.6. Một số ví dụ (tt) 
Đọc đối tượng 
47 
7.6. Một số ví dụ (tt) 
Đọc/ghi ngẫu nhiên 
48 
49 

File đính kèm:

  • pptxbai_giang_lap_trinh_huong_doi_tuong_chuong_7_nhap_xuat_tren.pptx