Trang 104
Chng 5: NHP XUT (Input/Output)
Mt chng trình thng xuyên làm vic vi d liu, có th lu tr lâu dài chúng ta
phi lu tr và nhn li d liu t thit b lu tr ngoài, ngun thông tin ngoài không ch
gm d liu c lu tr trên a t, a CD mà nó có th là d liu ca mt chng trình
khác, hoc có th là c lu tr trên mng… dù chúng c lu trâu chúng cng
ch có 1 s dng nh: i ng, kí t, hình nh hoc âm thanh, dù d liu c lu tr
i hình thc nào, lu trâu thì java u tru tng hoá thành các lung, u này là
rt tinh vi nó làm cho ta không cn phi quan tâm d liu c lu trâu, di dng
thc nh th nào, nó ng nht mi ngun d liu vi nhau:
nhn v các thông tin, mt chng trình m mt lung liên kt vi i tng ngun(
tp tin, b nh, Socket) và c các thông tin tun t.
ng t ghi thông tin ra các thit b ngoài bng cách m mt lung n i tng ích
và ghi thông tin ra mt cách tun t nh
Lung là s tru tng hoá mc cao, do vy bt k d liu c c vào tâu hoc ghi
ra âu, thì thut toán c/ghi tun tu ta nh sau:
Trang 105
I. Lp lung
Java a ra nhiu lp lung, x lý mi loi d liu, java chia lung ra thanh 2 loi:
lung byte ( byte stream) và lung kí t (character stream), lp InputStream và
OutputStream là hai lp c s cho mi lung nhp xut hng byte, và lp Reader/ Writer
là hai lp c s cho vic c ghi hng kí t.
p RandomAccessFile k tha t lp Object và trin khai giao din, InputStream và
OutputStream, ây là lp duy nht h tr cc ln ghi.
1.1. Lp nhp, xut hng kí t
Reader và Writer là hai lp c s tru tng cho lung hng kí t, hai lp này cung cp
t giao din chung cho tt c các lp c/ ghi hng kí t, mi ln c/ ghi ra lung là
c 2 byte tng ng vi mt kí t unicode, Sau ay là mô hình phân cp các lp c/ ghi
ng kí t
1.2. Lung hng byte
có thc ghi 1 byte, ta phi s dng lung hng byte, hai lp InputStream và
FileWriter cho vic c ghi hng kí t, thông thng mun s dng lung tp tin ta s
ng hàm to ca các lp tng ng liên kt lung vi mt tp tin c th.
Trang 107
public void FileInputStream ( String FileName)
public void FileInputStream ( File file)
public void FileOutputStream ( String FileName)
public void FileOutputStream (File file)
public void FileWriter ( String FileName)
public void FileWriter (File file)
public void FileReader ( String FileName)
public void FileReader (File file)
Ví d: Vit chng trình file copy, thc hin vic copy mt tp, ta s vit chng trình này
dng c 2 lung hng byte và hng kí t
import java.io.*;
// chng trình copy s dng lung hng kí t
public class CopyCharacter {
public static void main(String[] args) throws IOException {
File inputFile = new File("C:/in.txt");
File outputFile = new File("C:/out.txt");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read())! = -1) out.write(c);
in.close();
out.close();
}
}
import java.io.*; // Chng trình copy s dng lung hng byte
public class CopyBytes {
public static void main(String[] args) throws IOException {
void writeUTF(String str) Chi mt xâu kí t Unicode ra lung
Các phng thc sau c nh ngha trong giao din DataInput:
boolean readBoolean() c mt giá tr logic t lung
byte readByte() c mt byte t lung
char readChar() c mt kí t t lung
double readDouble() c mt s double t lung
float readFloat() c mt s float t lung
void readFully(byte[] b) c mt mng byte t lung và ghi vào
ng
voidreadFully(byte[] b, int off, int len) c len byte t lung và ghi vào mng
v trí off
int readInt() c mt s nguyên
String readLine() c mt xâu kí t cho n khi gp kí t
xung dòng và b qua kí t xung dòng
long readLong() c mt s long
short readShort() c mt s short
int readUnsignedByte() c mt s nguyên không du trong
khong 0..255
in treadUnsignedShort() c mt s nguyên không du trong
n t 0..65535
String readUTF() c mt xâu kí t Unicode
int skipBytes(int n) qua n byte t lung
Sau ây là mt ví d nh v lung nhp xut d liu, ví d này ghi d liu ra tp ri li c
lai:
import java.io.*;
public class DataIODemo {
public static void main(String[] args) throws IOException {
// write the data out
DataOutputStream out = new DataOutputStream(new FileOutputStream(c:/TestIO.txt"));
out.writeInt(10); // ghi s nguyên
void flush() n d liu trong vùng m ra
void print(boolean b) ghi giá tr logic ra lung
void print(char c) ghi kí t
void print(char[] s) ghi mt mange kí t
void print(double d) ghi mt s thc chính xác kép
void print(float f) ghi mt s thc
void print(int i) ghi mt s nguyên
void print(long l) ghi mt s nguyên dài
void print(Object obj) ghi mt i tng
void print(String s) ghi mt xâu
void println() o ra mt dòng trng
void println(boolean x) ghi giá tr logic ra lung và xung dòng
void println(char x) ghi kí t và xung dòng