Giới thiệu về vào/ra tệp text và binary trong Java Các dữ liệu mà một chương trình ngôn ngữ Java sử dụng phải lấy từ rất nhiều loại nguồn dữ liệu khác nhau, bao gồm cả cơ sở dữ liệu,
Trang 1BÀI TẬP LỚN
Trang 2Nội Dung Chính
Giới thiệu về vào/ra tệp (text và binary)
Khái niệm luồng
Luồng byte (Byte Streams)
Luồng ký tự (Character Streams)
Những luồng được định nghĩa trước
Vào ra tệp dùng luồng byte
Vào ra tệp dùng luồng ký tự
Trang 3Giới thiệu về vào/ra tệp (text và
binary) trong Java
Các dữ liệu mà một chương trình ngôn ngữ Java sử
dụng phải lấy từ rất nhiều loại nguồn dữ liệu khác nhau, bao gồm cả cơ sở dữ liệu, chuyển giao byte trực tiếp
qua một ổ cắm (socket) và các tệp tin
Ngôn ngữ Java sẽ mang lại cho bạn rất nhiều công cụ
để bạn có thể nhận được các thông tin từ các nguồn bên ngoài Các công cụ này phần lớn nằm trong gói java.io
Trang 4Giới thiệu về vào/ra tệp (text và
binary) trong Java
Trong tất cả các nguồn dữ liệu sẵn có, các tệp tin là phổ biến nhất và thường thuận tiện nhất Việc hiểu biết cách
sử dụng các API có sẵn của ngôn ngữ Java để tương tác với các tệp tin là một kỹ năng cơ bản của lập trình viên
Nhìn chung, ngôn ngữ Java cung cấp cho bạn một lớp bao gói (File) cho kiểu tệp tin trong hệ điều hành của
bạn Để đọc tệp tin đó, bạn phải sử dụng các luồng
(streams) phân tích cú pháp các byte đầu vào thành các kiểu của ngôn ngữ Java
Trang 5Giới thiệu về vào/ra tệp (text và
binary) trong Java
Xử lý files là một phần của công việc xử lý các
luồng, giúp cho một chương trình có thể đọc, ghi dữ
liệu trong bộ nhớ, trên files và trao đổi dữ liệu thông
qua các kết nối trên mạng
Trang 6Luồng (Streams)
Tất cả những hoạt động nhập/xuất dữ liệu đều được
quy về một khái niệm gọi là luồng (stream) Luồng
là nơi có thể “sản xuất” và “tiêu thụ” thông tin
Luồng thường được hệ thống xuất nhập trong Java gắn kết với một thiết bị vật lý
Tất cả các luồng đều có chung một nguyên tắc hoạt động ngay cả khi chúng được gắn kết với các thiết bị vật lý khác nhau Vì vậy cùng một lớp, phương thức xuất nhập có thể dùng chung cho các thiết bị vật lý khác nhau
Trang 7 InputStream định nghĩa những đặc điểm chung
cho những luồng nhập byte OutputStream mô tả
cách xử lý của các luồng xuất byte
Luồng (Streams)
Trang 8 Luồng ký tự (Character Streams)
Các luồng ký tự được định nghĩa dùng hai lớp phân
cấp Mức trên cùng là hai lớp trừu tượng Reader và
Writer.
Lớp Reader dùng cho việc nhập dữ liệu của luồng, lớp
Writer dùng cho việc xuất dữ liệu của luồng.
Luồng (Streams)
Trang 9 Gói java.lang định nghĩa lớp System, có ba biến luồng được định nghĩa trước là in, out và err, các biến này là các fields được khai báo static trong lớp System.
Luồng (Streams)
Trang 10 Những luồng được định nghĩa trước (cont)
System.out: luồng xuất chuẩn, mặc định là console System.out là một đối tượng kiểu PrintStream
System.in: luồng nhập chuẩn, mặc định là bàn phím System.in là một đối tượng kiểu InputStream
System.err: luồng lỗi chuẩn, mặc định cũng là console System.err cũng là một đối tượng kiểu PrintStream giống System.out
Luồng (Streams)
Trang 11Vào ra tệp
Hai lớp InputStream và OutputStream là siêu lớp
đối với tất các các lớp luồng xuất nhập kiểu byte
Những phương thức trong hai lớp này là tập tối tiểu các chức năng nhập xuất mà những luồng nhập xuất kiểu byte có thể sử dụng
Trang 12 Vào ra tệp văn bản
Đọc dữ liệu từ tệp:
Mở tệp: tạo đối tượng lớp FileInputStream gắn với tệp
cần mở
Đọc dữ liệu: dùng phương thức read() trên
FileInputStream, phương thức này đọc từng byte từ
tệp và trả về giá trị của byte đọc được Trả về -1 khi hết tệp, và trả về IOException khi có lỗi đọc
Đóng tệp: dùng phương thức close() trên
FileInputStream.
Vào ra tệp dùng luồng byte (cont)
Trang 13Vào ra tệp dùng luồng byte (cont)
Trang 14Vào ra tệp dùng luồng byte (cont)
Ghi dữ liệu ra tệp:
Mở tệp: tạo đối tượng lớp FileOutputStream gắn với
tệp cần mở
Ghi dữ liệu: dùng phương thức write(int byteval),
phương thức này ghi một byte xác định bởi tham số byteval xuống tệp, và trả về IOException khi có lỗi ghi
Đóng tệp: dùng phương thức close() trên
FileInputStream.
Trang 15Vào ra tệp dùng luồng byte (cont)
Trang 16 Vào ra tệp nhị phân
Đọc dữ liệu từ tệp:
Mở một tệp để đọc dữ liệu: dùng hàm tạo một đối
số của lớp DataInputStream tạo đối tượng gắn với
tệp cần mở, với đối số truyền vào là đối tượng lớp
Trang 18 Vào ra tệp nhị phân
Ghi dữ liệu ra tệp:
Mở một tệp để ghi dữ liệu: dùng hàm tạo một đối số
của lớp DataOutputStream tạo đối tượng gắn với
tệp cần mở, với đối số truyền vào là đối tượng lớp
Trang 20Vào ra tệp dùng luồng ký tự
Đọc dữ liệu từ tệp:
Mở một tệp để ghi dữ liệu: dùng hàm tạo một đối số
của lớp FileWriter tạo đối tượng gắn với tệp cần mở,
tên tệp cần mở là đối số truyền vào cho hàm tạo của
lớp Tạo một bộ đệm ghi dữ liệu (BufferedWriter) gắn với đối tượng FileWriter.
Trang 21dụng phương thức flush() và close().
Vào ra tệp dùng luồng ký tự (cont)
Trang 22 Đọc dữ liệu từ tệp (cont):
Ví dụ:
FileReader fr = new FileReader(“test.txt");
BufferedReader br = new BufferedReader(fr);
Trang 23 Ghi dữ liệu ra tệp:
Mở một tệp để ghi dữ liệu: dùng hàm tạo một đối số
của lớp FileWriter tạo đối tượng gắn với tệp cần mở,
tên tệp cần mở là đối số truyền vào cho hàm tạo của
lớp Tạo một bộ đệm ghi dữ liệu (BufferedWriter) gắn với đối tượng FileWriter.
Vào ra tệp dùng luồng ký tự (cont)
Trang 24 Ghi dữ liệu ra tệp (cont)
Ghi dữ liệu: sử dụng phương thức write() trên bộ đệm
đọc dữ liệu
Đóng tệp: làm rỗng và đóng bộ đệm đọc dữ liệu sử
dụng phương thức flush() và close().
Vào ra tệp dùng luồng ký tự (cont)
Trang 25 Ghi dữ liệu ra tệp (cont)
Ví dụ:
FileWriter fwriter = new FileWiter(“test.txt”);
BufferedWriter buffered = new BufferedWriter(fwriter);
Trang 26TÀI LIỆU THAM KHẢO
Murach's Java SE 6 by Joel Murach and Andrea
Steelman
Website
http://uitnetwork.com/forum/?showtopic=254
http://zensoft.vn/ShowArticle.aspx?ID=521
Trang 27THANK YOU!