1. TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
INPUT – OUTPUT
TRONG JAVA
GVHD: Th.S Trương Thị Ngọc Phượng
Nhóm 1:
1.Lê Đức Cảnh – 10910018
2.Bùi Tuấn Anh – 10910032
3.Hoàng Thanh Bình – 10910034
4.Trịnh Xuân Bình - 11110013
2. Phân công việc
STT Họ và tên MSSV Công việc
1 Bùi Tuấn Anh 10910032 Text File
2 Hoàng Thanh Bình 10910034 Text File
3 Lê Đức Cảnh 10910018 Binary File
4 Trịnh Xuân Bình 11110013 Binary File
3. Nội dung
I- Giới thiệu.
II- Stream.
1. Các loại Stream trong Java
2. Phân cấp các lớp nhập/xuất theo byte vật lý
3. Phân cấp các lớp nhập/xuất theo byte ký tự
4. Phân cấp các lớp nhập/xuất theo File
III. Tập tin văn bản và tập tin nhị phân
1. Tập tin văn bản(Text File)
2. Tập tin nhị phân(Binary File)
IV- Tóm tắt
4. I. Giới thiệu
Nhập dữ liệu(Input) là tác vụ đưa các dữ liệu cụ
thể vào cho biến trong chương trình. Như vậy,
phải có một nguồn chứa dữ liệu (bàn phím, tập
tin, biến khác).
Xuất dữ liệu là tác vụ đưa trị cụ thể của biến
trong chương trình ra một nơi chứa (màn hình
hay file hay biến khác).
Nhập/xuất dữ liệu là các phương tiện mà
chương trình tương tác với user và thường
không thể thiếu trong đa số các ứng dụng.
5. II- Stream
Stream là một đối tượng cho phép dòng chảy
dữ liệu giữa chương trình của mình và một số
thiết bị nhập xuất hoặc một số tập tin.
Dòng dữ liệu đi vào chương trình được gọi là
luồng nhập (input stream).
Dòng dữ liệu từ chương trình ra ngoài gọi
luồng xuất (output stream).
9. 3. Phân cấp các lớp nhập theo ký tự
3. Phân cấp các lớp xuất theo ký tự
10. 4. Phân cấp các lớp thao tác file
với hệ điều hành
Lớp File giúp truy xuất các thuộc tính của 1
file/thư mục.
Lớp FileDescriptor: Giúp đồng bộ việc truy xuất
file.
Lớp RandomAccessFile giúp đọc/ghi file với dữ
liệu thuộc kiểu cơ bản
11. III. Tập tin văn bản và tập tin nhị phân
(Text files and binary files)
Tập tin văn bản là các tập tin có chứa chuỗi ký
tự khi xem trong một trình soạn thảo văn bản
hoặc đọc bởi một chương trình.
Tập tin văn bản đôi khi còn được gọi là tập tin
ASCII vì chúng chứa dữ liệu được mã hóa bằng
cách sử dụng mã ASCII.
Các tập tin có nội dung phải được xử lý như
chuỗi các số nhị phân được gọi là tập tin nhị
phân.
12. 1.Tập tin văn bản (Text files)
Ghi vào tập tin văn bản
Phụ thêm vào tập tin văn bản
Đọc tập tin văn bản
Sử dụng Scanner
Sử dụng BufferedReader
Tên đường dẫn
Lời gọi hàm lồng nhau
System.in, System.out và System.err
13. 1.1. Ghi vào tập tin văn bản
Mở tập tin văn bản để viết ra
Cú pháp:
PrintWriter Output_Stream_Name;
Output_Stream_Name =
newPrintWriter(newFileOutputStream(File_Name));
Đặt tên tập tin
Tên file theo OS
Một tập tin có 2 tên
IOException
Đóng tập tin: cú pháp Stream_Object.close();
14. 1.2. Phụ thêm vào tập tin văn bản
Output_Stream_Name=
new PrintWriter(
new FileOutputStream(File_Name, true or
false));
15. 1.3. Đọc tập tin văn bản sử dụng Scanner
Cú pháp
Scanner Stream_Object=
new Scanner(new FileInputStream(File_Name));
Demo
16. 1.4. 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ự.
Method BufferedReader
18. 1.5. Lớp File
Làm việc trực tiếp với các tập tin:
Tạo, xóa, đổi tên tập tin
Lấy thông tin đường dẫn
Kiểm tra sự tồn tại của một tập tin/ thư mục.
22. 1.6. 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
24. 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…
25. 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)
27. 2. Tập tin nhị phân (Binary File)
- Binary Files là một tập tin máy tính mà có thể chứa
bất kỳ loại dữ liệu, mã hóa dưới dạng nhị phân để
lưu trữ máy tính và mục đích chế biến nhằm mục
đích xử lý để cho các chương trình đọc.
- Các luồng dành cho xử lý binary file là
ObjectInputStream và ObjectOutputStream. Các
luồng này có thể tự động chuyển số và kí tự thành
byte và chứa trong binary file.
28. 2.1. Viết dữ liệu đơn giản với Binary file
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.
32. 2.2. Unicode & UTF
- Java sử dụng 2 dạng trình bày của văn bản
+ Unicode dùng biểu diễn ký tự & chuỗi trong bộ
nhớ
+ UTF dùng cho nhập xuất
- Unicode dùng 16 bit để biểu diễn 1 ký tự.
- UTF
+ Viết tắt của “UCS Transformation Format,”
+ UCS: “Universal Character Set.”
+ Dạng nén của ký tự Unicode16-bit.
+ UTF mã hoá các ký tự với số bit đủ để biểu
diễn ký tự
33. 2.3. Lớp RandomAccessFile
- Truy xuất ngẫu nhiên, di chuyển (seek) đến 1 vị trí tuỳ ý
- Đọc hoặc ghi lượng dữ liệu tuỳ ý.
- Hỗ trợ đọc ghi dữ liệu theo kiểu nguyên thuỷ
- Mỗi thao tác đọc ghi tự động di chuyển con trỏ đến vị trí
mới
- long length() throws IOException: kích thước= bytes.
- void seek(long position) throws IOException:
- Di chuyển tương đối so với đầu file
34. - RandomAccessFile không dẫn xuất từ
InputStream hay OutputStream mà nó hiện thực các
interface DataInput, DataOutput (có định nghĩa các
phương thức I/O cơ bản).
- RandomAccessFile hỗ trợ vấn đề định vị con trỏ
file bên trong một file dùng phương thức seek(long
newPos).
35. Lớp RandomAccessFile...
Constructors
RandomAccessFile(File f, String mode)
RandomAccessFile(String Filename, String mode)
mode Ý nghĩa
"r" Mở file chỉ để đọc , có thể gây lỗi IOException.
"rw" Mở file đổ đọc + ghi. Nếu file chưa có thì sẽ tạo mới file này.
"rws" Mở file để đọc + ghi. Nếu có hiệu chỉnh nội dung hay dữ liệu
mô tả file (metadata) thì đòi hỏi phải được ghi đồng bộ.
"rwd" Mở file để đọc + ghi và mỗi khi có hiệu chỉnh nội dung file thì
phải được đồng bộ.
36. Lớp RandomAccessFile...
RandomAccessFile Method Summary
void close() – Đóng file.
FileChannel getChannel() Lấy đối tượng FileChannel kết hợp với .
FileDescriptor getFD() Lấy FileDescriptor.
long getFilePointer() - Lấy vị trí truy xuất hiện hành.
long length() - Lấy đ9ộ dài file.
int
read() Đọc 1 byte.
void
write(int b) ghi 1 byte vào vị trí hiện hành
int
void
read(byte[] b) Đọc 1 mảng byte- trả về số byte đọc được.
write(byte[] b) ghi mảng b
int
void
read(byte[] b, int off, int len)
write(byte[] b, int off, int len) Đọc/ghi len byte đưa vào mảng b từ vị trí off, trả về số byte đọc được.
boolean
void
readBoolean() Đọc/ghi 1 trị boolean.
writeBoolean (boolean v)
byte
void
readByte() Đọc.ghi 1 trị 8 bit có dấu.
writeByte ( int x)
char
void
readChar() - Đọc 1 ký tự Unicode .
writeChar( int v) ghi 1 ký tự 2 byte, byte cao ghi trước
double
void
readDouble() Đọc/ ghi 1 trị double.
writeDouble ( double x) – ghi dạng longbits 8 bytes
37. Lớp RandomAccessFile...
float
void
readFloat() Đọc/ ghi 1 trị float.
writeFloat( float x) ghi dạng intbit 4 bytes
void readFully(byte[] b) Đọc ra cả 1 mảng byte từ vị trí hiện hành.
void readFully(byte[] b, int off, int len) Đọc len byte từ vị trí hiện hành đưa vào vị trí off của mảng b.
int
void
readInt() Đọc 1 số integercó dấu 32 bit .
writeInt(int x)
String readLine() Đọc 1 dòng kể từ vị trí hiện hành.
long
void
readLong() Đọc 1 số long có dấu (64 bit).
writeLong(long x) , 8 byte, byte cao ghi trước
short
void
readShort() Đọc 1 số short có dấu (16 bit).
writeShort(short x)
int readUnsignedByte() Đọc 1 byte không dấu (8 bit).
int readUnsignedShort() Đọc 1 số short không dấu (16 bit).
String
void
readUTF() Đọc 1 chuỗi.
writeUTF(String S) ghi chuỗi dạng mã UTF-8 độc lập máy chủ
void seek(long pos) Nhẩy đến vị trí pos từ đầu file.
void setLength(long newLength) ấn định độ dài file.
int skipBytes(int n) Bỏ qua n bytes.
void writeBytes(String s) Ghi chuỗi dạng nhóm các bytes.
void writeChars(String s) Ghi chuỗi dạng nhóm ký tự.
39. 2.4. Binary I/O của Object
Các lớp chỉ cần implement interface Serializable.
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.
Demo
40. 2.5. The Serializable interface
- Khai báo implements Serializable để tạo khả
năng tuần tự hóa cho các đối tượng của lớp
- Serializablelà 1 interface phân loại, (tag interface)
+ public interface Serializable { }
+ Không có phương thức nào
Ví dụ: public classPerson implements Serializable
{}
41. 2.6. Mảng Object trong binary file
Một mảng là một đối tượng và do đó là một tham
số cho writeObject. Một mảng nguyên có thể được
lưu vào binary file sử dụng writeObject và đọc sau
đó sử dụng readObject. Khi làm như vậy, nếu
mảng có kiểu cơ sở là một lớp thì lớp đó phải là
Serializable. Điều này có nghĩa là nếu lưu trữ tất
cả dữ liệu cho một lớp Serializable trong một
mảng đơn, sau đó có thể xuất tất cả dữ liệu vào
một binary file với một sự dẫn ra của writeObject.
Demo