Là m t l p tr u tộ ớ ừ ượng đ nh nghĩa cỏch th c nh n d li u. Cú cỏc phị ứ ậ ữ ệ ương th c chớnhứ sau:
• read(): Đ c cỏc byte d li u t m t dũng. N u nh khụng cú byte d li u nào,ọ ữ ệ ừ ộ ế ư ữ ệ nú ph i ch . Khi m t phả ờ ộ ương th c ph i ch , cỏc lu ng đang th c hi n ph iứ ả ờ ồ ự ệ ả t m d ng cho đ n khi cú d li u. ạ ừ ế ữ ệ
• read(byte[]): Tr v s byte đ c đả ề ố ọ ược hay ‘-1’ n u nh đó đ c đ n cu i dũng.ế ư ọ ế ố Nú gõy ra ngo i l IOException n u cú l i x y ra. ạ ệ ế ỗ ả
• read(byte[],int,int): Nú cũng đ c vào m t m ng byte. Nú tr v s byte th c sọ ộ ả ả ề ố ự ự đ c đọ ược cho đ n khi k t thỳc dũng. Nú gõy ra ngo i l IOException n u l iế ế ạ ệ ế ỗ x y ra. ả
• available(): Phương phỏp này tr v s lả ề ố ượng byte cú th đ c để ọ ược mà khụng ph i ch . Nú tr v s byte hi n t i cú trong dũng. Nú khụng ph i là phả ờ ả ề ố ệ ạ ả ương th c tin c y đ th c hi n ti n trỡnh x lý đ u vào. ứ ậ ể ự ệ ế ử ầ
• close(): Phương th c này đúng dũng. Nú dựng đ gi i phúng m i tài nguyờnứ ể ả ọ dũng đó s d ng. Luụn luụn đúng dũng đ ch c ch n r ng dũng x lý đử ụ ể ắ ắ ằ ử ược k tế thỳc. Nú gõy ra ngo i l IOException n u l i x y ra.ạ ệ ế ỗ ả
• mark(): Đỏnh d u v trớ hi n t i c a dũng. ấ ị ệ ạ ủ
• markSupported(): Tr v giỏ tr boolean ch ra r ng dũng cú h tr cỏc kh năngả ề ị ỉ ằ ỗ ợ ả mark và reset hay khụng. Nú tr v true n u dũng h tr ngả ề ế ỗ ợ ượ ạ ả ềc l i tr v false. • reset(): Phương th c này đ nh v l i dũng theo v trớ đứ ị ị ạ ị ược đỏnh l n cu i cựng.ầ ố
• skip(): Phương th c này b qua ‘n’ byte dũng vào. ’-n’ ch đ nh s byte đứ ỏ ỉ ị ố ược bỏ qua. Nú gõy ra ngo i l IOException n u l i x y ra. Phạ ệ ế ỗ ả ương th c này s d ngứ ử ụ đ di chuy n t i v trớ đ c bi t bờn trong dũng vào. ể ể ớ ị ặ ệ
III. L p OutputStreamớ
Là l p tr u tớ ừ ượng đ nh nghĩa cỏch ghi cỏc k t xu t đ n dũng. Nú cung c p m t t p cỏcị ế ấ ế ấ ộ ậ phương th c tr giỳp t o ra, ghi và x lý k t xu t cỏc dũng. Cỏc phứ ợ ạ ử ế ấ ương th c bao g m: ứ ồ
• write(int): Phương th c này ghi m t byte.ứ ộ
• write(byte[]): Phương th c này phong to cho đ n khi m t byte đứ ả ế ộ ược ghi. Dũng ph i ch cho đ n khi tỏc v ghi hoàn t t. Nú gõy ra ngo i l IOException n uả ờ ế ụ ấ ạ ệ ế l i x y ra.ỗ ả
• write(byte[], int, int): Phương th c này ghi m ng cỏc byte. L p OutputStreamứ ả ớ đ nh nghĩa ba d ng khỏc nhau c a phị ạ ủ ương th c đ cú th ghi m t byte riờng l ,ứ ể ể ộ ẻ m t m ng cỏc byte, hay m t đo n c a m t m ng byte. ộ ả ộ ạ ủ ộ ả
• flush(): Phương th c này x s ch dũng. Đ m d li u đứ ả ạ ệ ữ ệ ược ghi ra dũng. Nú kớch ho t IOException n u l i x y ra.ạ ế ỗ ả
• close(): Phương th c đúng dũng. Nú đứ ược dựng đ gi i phúng m i tài nguyờnể ả ọ g n v i dũng. Nú kớch ho t IOException n u l i x y ra. ắ ớ ạ ế ỗ ả
IV. L p FileInputStreamớ
K th a t InputStream, l p này cho phộp đ c vào t m t t p tin dế ừ ừ ớ ọ ừ ộ ậ ưới d ng m tạ ộ stream. Cỏc đ i tố ượng c a l p này đủ ớ ượ ạc t o ra nh đờ ường d n t i file, đ i tẫ ớ ố ượng File, ho cặ đ i tố ượng FileDescriptor làm m t đ i s . ộ ố ố
L p này cú 3 phớ ương th c kh i t o sau:ứ ở ạ
• FileInputStream(String name): Tham s là tờn c a t p tin đ t o lu ng.ố ủ ậ ể ạ ồ • FileInputStream(File f): Tham s là đ i tố ố ượng file đ t o lu ng.ể ạ ồ
• FileInputStream(FileDescriptor fdObj): Tham s là đ i tố ố ượng FileDescriptor để t o lu ng.ạ ồ
Vớ d :ụ
InputStream in = new FileInputStream(“C:\\LETI\\JAVA\\Account.txt”);
V. L p FileOutputStreamớ
L p này cung c p kh năng ghi d li u xu ng t p tin, đớ ấ ả ữ ệ ố ậ ược d n xu t t l p chaẫ ấ ừ ớ OutputStream. Cú 3 phương th c kh i t o:ứ ở ạ • FileOutputStream(String name); • FileOutputStream(File f); • FileOutputStream(FileDescriptor fdObj) VI. L p Fileớ
L p này đớ ượ ử ục s d ng đ truy c p cỏc đ i tể ậ ố ượng t p tin và th m c. Cỏc t p tin đ tậ ư ụ ậ ặ tờn theo qui ước đ t tờn t p tin c a h đi u hành. L p này cung c p cỏc phặ ậ ủ ệ ề ớ ấ ương th c thi t l pứ ế ậ cỏc t p tin và cỏc th m c. T t c cỏc thao tỏc th m c và t p tin đậ ư ụ ấ ả ư ụ ậ ược th c hi n thụng quaự ệ cỏc phương th c c a l p File. Nh v y, ta dựng File trong t t c cỏc thao tỏc qu n lý file vàứ ủ ớ ư ậ ấ ả ả th m c.ư ụ
Cú 3 cỏch đ t o cỏc đ i tể ạ ố ượng t l p File:ừ ớ • File(String path);
• File(String path, String name); • File(File dir, String name);
Vớ d :File f = new File("C:\jdk1.4\bin\hello.java");ụ ho cặ
File f = new File("C:\jdk1.4\bin", "hello.java"); ho cặ
File curDir = new File(".");
File f = new File(curDir, "Hello.java"); Cỏc phương th c:ứ
• public String getName(): l y tờn đ i tấ ố ượng t p tin.ậ • public String gePath(): l y đấ ường d n c a t p tin.ẫ ủ ậ
• public String getAbsolutePath(): l y đấ ường d n tuy t đ i c a t p tin.ẫ ệ ố ủ ậ • public String getParent(): l y tờn th m c cha.ấ ư ụ
• public Boolean createNewFile(): t o m t t p tin m i.ạ ộ ậ ớ
• public void createTempFile(String pattern, File dir): t o t p tin t m th i.ạ ậ ạ ờ • public void deleteOnExit(): yờu c u xoỏ t p tin khi chầ ậ ương trỡnh ch m d t.ấ ứ • public boolean canWrite(): cho bi t tin cú cho phộp ghi hay khụng (true n u cú).ế ế • public boolean canRead(): cho bi t t p tin đế ậ ược phộp đ c hay khụng (true n uọ ế
cú)
• public void setReadOnly(): đ t thu c tớnh ch đ c.ặ ộ ỉ ọ
• public boolean isFile(): cho bi t t p tin cú h p l hay khụng (true n u cú).ế ệ ợ ệ ế
• public boolean isDirectory(): cho bi t t p tin cú ph i th m c hay khụng (trueế ậ ả ư ụ n u cú). ế
• public boolean isHidden(): ki m tra xem t p tin cú n hay khụng (true n u cú).ể ậ ẩ ế • public long length(): cho bi t kớch thế ướ ậc t p tin (byte).
• public boolean mkdir(): t o m t th m c t đ i tạ ộ ư ụ ừ ố ượng file, true n u thành cụng.ế • renameTo(File dest): đ i tờn t p tin hi n t i sang tờn m i.ổ ậ ệ ạ ớ
• public String[ ] list(): l y danh sỏch cỏc t p tin và th m c.ấ ậ ư ụ
• public String[ ] list(FilenameFilter filter): l y danh sỏch t p tin tho món đi uấ ậ ả ề ki n l c, vớ d *.gif.ệ ọ ụ
• public booean delete(): xoỏ t p tin, true n u xoỏ thành cụng.ậ ế • public String toString(): tr v đả ề ường d n c a t p tin.ẫ ủ ậ
• public String toURL(): tr v đ i tả ề ố ượng URL tương ng v i t p tin.ứ ớ ậ Chương trỡnh vớ d :ụ
public class Test {
public static void main(String args[]) {
File f = new File("test");
System.out.println(f.getAbsolutePath()); // L y đấ ường d n tuy t đ iẫ ệ ố System.out.println(f.exists()); // Ki m tra s t n t iể ự ồ ạ
} }
VII. Nh p xu t l c ậ ấ ọ
Là m t ki u dũng cú độ ể ượ ừ ệc t vi c thay đ i cỏch x lý dũng hi n cú. Cỏc l p, cỏc dũngổ ử ệ ớ nh p xu t l c c a java s giỳp ta l c vào/ra theo m t s cỏch. ậ ấ ọ ủ ẽ ọ ộ ố
B l c n m gi a m t dũng nh p và m t dũng xu t. Nú th c hi n x lý m t quỏ trỡnhộ ọ ằ ữ ộ ậ ộ ấ ự ệ ử ộ nào đú trờn cỏc byte được truy n t đ u vào đ n đ u ra.ề ừ ầ ế ầ
Cỏc b l c cú th ghộp v i nhau khi đú đ u ra c a b l c này tr thành đ u vào c a bộ ọ ể ớ ầ ủ ộ ọ ở ầ ủ ộ l c kia. ọ
VII.1 L p FilterInputStream: ớ
Đõy là l p tr u tớ ừ ượng. Nú là cha c a t t c cỏc l p dũng nh p l c. M t dũng cú thủ ấ ả ớ ậ ọ ộ ể được đ c và đ a k t qu cho m t dũng khỏc. ọ ư ế ả ộ
L p FilterInputStream đớ ược thi t k sao cho cú kh năng k t chu i nhi u b l c. Đế ế ả ế ỗ ề ộ ọ ể th c hi n đi u này chỳng ta dựng vài t ng l ng nhau. ự ệ ề ầ ồ
VII.2 L p FilterOutputStreamớ
L p này là m t d ng b tr cho l p FilterInputStream. Nú là l p cha c a t t c cỏc l pớ ộ ạ ổ ợ ớ ớ ủ ấ ả ớ dũng xu t l c. D li u ghi vào l p này cú th s a đ i theo nhu c u đ th c hi n tỏc v l c vàấ ọ ữ ệ ớ ể ử ổ ầ ể ự ệ ụ ọ sau đú được chuy n t i đ i tể ớ ố ượng OutputStream.
VIII. Vào/ra cú s d ng b đ m ử ụ ộ ệ
Vựng đ m là kho l u tr d li u. Chỳng ta cú th l y d li u t vựng đ m thay vỡệ ư ữ ữ ệ ể ấ ữ ệ ừ ệ quay tr l i ngu n ban đ u c a d li u.ở ạ ồ ầ ủ ữ ệ
Java s d ng c ch nh p/xu t cú l p vựng đ m đ t m th i l p cache d li u vào/raử ụ ơ ế ậ ấ ậ ệ ể ạ ờ ậ ữ ệ c aủ
m t dũng. Nú giỳp chộ ương trỡnh đ c/ghi lọ ượng d li u nh khụng nh hữ ệ ỏ ả ưởng l n đ n hi uớ ế ệ năng chung c a h th ng. ủ ệ ố
VIII.1 L p BufferedInputStream:ớ
L p này t đ ng t o ra và duy trỡ vựng đ m đ h tr thao tỏc vào. Nh đú chớ ự ộ ạ ệ ể ỗ ợ ờ ương trỡnh cú th đ c d li u t dũng t ng byte m t mà khụng nh hể ọ ữ ệ ừ ừ ộ ả ưởng đ n t c đ th c hi nế ố ộ ự ệ c a h th ng. ủ ệ ố
VIII.2 L p BufferedOutputStreamớ
L p này đ nh nghĩa hai phớ ị ương th c thi t l p, m t cho phộp ch đ nh kớch c c a vựngứ ế ậ ộ ỉ ị ỡ ủ đ m xu t, m t s d ng kớch c vựng đ m ng m đ nh. L p này đ nh nghĩa ch ng t t c cỏcệ ấ ộ ử ụ ỡ ệ ầ ị ớ ị ồ ấ ả phương th c c a OutputStream và khụng đ a thờm b t kỡ phứ ủ ư ấ ương th c m i nào. ứ ớ
Chương trỡnh sau đõy đ c và ghi thụng tin c a đ i tọ ủ ố ượng SinhVien theo m t format,ộ m i sinh viờn n m trờn m t dũng trong file:ỗ ằ ộ
// Ke thua lop People import java.io.*;
import java.util.StringTokenizer; public class SinhVien extends People {
private String Lop;// Ten lop
private double DiemTongKet; // Diem tong ket public final String mauda ="vang";//Hang so private int ID;// Ma so SinhVien
protected static int MaSo;// ma so chung de cap phat cho moi sinh vien public SinhVien(int ns,String ht,String l,double dtk)
{
super(ns,ht);//goi constructor cua lop cha la People Lop = l;
DiemTongKet=dtk;
// Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop ID=MaSo;
// Tang ma so len 1 den gan cho SinhVien sau MaSo+=1;
}
// Phuong thuc tinh tuoi protected int TinhTuoi() {
java.util.Date homnay = new java.util.Date(); return (homnay.getYear() - NamSinh +1); }
// Khai bao chong phuong thuc toString() public String toString()
{ return String.valueOf(ID)+ "|" + String.valueOf(this.TinhTuoi()) + "|" + String.valueOf(DiemTongKet)+"|" + HoVaTen; }
// Ghi thụng tin sinh viờn vào file
public void GhiData(PrintWriter out) throws IOException {
out.println(this.toString()); }
// Đ c thụng tin 1 sinh viờn t b đ m đ cọ ừ ộ ệ ọ
public void DocData(BufferedReader in) throws IOException {
String s = in.readLine(); // Đ c m t dũng trong b đ mọ ộ ộ ệ StringTokenizer t = new StringTokenizer(s, "|");
MaSo = Integer.parseInt(t.nextToken()); NamSinh = Integer.parseInt(t.nextToken()); DiemTongKet = Double.parseDouble(t.nextToken()); HoVaTen = t.nextToken(); } // Ham main
public static void main(String[] argv) {
// Dat gia tr bien static, sinh vien dau tien co ma so 1ị SinhVien.MaSo=1;
// bien doi tuong Vector l u cỏc sinh viờnư java.util.Vector sv = new java.util.Vector(5);
SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5); sv.addElement(k1); // Them sinh vien vao Vector
SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6); sv.addElement(k2);
SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7); sv.addElement(k3);
SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8); sv.addElement(k4);
SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9); sv.addElement(k5);
// Dung interface Enumeration de duyet cac phan tu cua Vector java.util.Enumeration enu = sv.elements();
try {
PrintWriter out = new PrintWriter(new FileWriter("C:\\LETI\\JAVA\\Sinhvien.dat")); while (enu.hasMoreElements())
{
// Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc SinhVien g = (SinhVien)enu.nextElement(); g.GhiData(out); } out.close(); } catch(Exception ep) {} // Doc tu file ra
SinhVien[] svs = new SinhVien[5]; try
{
BufferedReader in = new BufferedReader(new
FileReader("C:\\LETI\\JAVA\\Sinhvien.dat")); for(int i=0;i<svs.length;i++) {
svs[i] = new SinhVien(0,"","",0.0); svs[i].DocData(in); } } catch(IOException ep) {} for(int i=0;i<svs.length;i++) System.out.println(svs[i].toString()); }} 84
IX. L p RandomAccessFile ớ
L p RandomAccessFile cung c p kh năng th c hi n vào/ra theo m t v trớ c th bờn ớ ấ ả ự ệ ộ ị ụ ể trong m t t p tin. Trong l p này, d li u cú th đ c ho c ghi v trớ ng u nhiờn thay vỡ liờnộ ậ ớ ữ ệ ể ọ ặ ở ị ẫ t c. ụ
L p RandomAccessFile th c hi n c hai vi c nh p và xu t. Do võy, cú th th c hi nớ ự ệ ả ệ ậ ấ ể ự ệ I/O b ng cỏc ki u d li u nguyờn thu . L p này cũng h tr cỏc quy n c b n v đ c ho cằ ể ữ ệ ỷ ớ ỗ ợ ề ơ ả ề ọ ặ ghi t p tin, đi u này cho phộp đ c t p tin theo ch đ ch đ c ho c đ c-ghi. ậ ề ọ ậ ế ộ ỉ ọ ặ ọ
Đ i tố ượng thu c l p RandomAccessFile cú th độ ớ ể ược kh i t o theo hai cỏch:ở ạ • RandomAccessFile(String name, String mode);
• RandomAccessFile(File f, String mode); Trong đú mode là ch đ m t p tin:ế ộ ở ậ
mode = "r" - ch đ ch đ c.ế ộ ỉ ọ mode = "rw" - ch đ ghi và đ c.ế ộ ọ Vớ d : ụ
RandomAccessFile file = new RandomAccessFile(“C:\\LETI\\JAVA\\Account.txt”, "r"); L p này h tr m t s phớ ỗ ợ ộ ố ương th c m i khỏc v i phứ ớ ớ ương th c đó th a k t cỏc l p ứ ừ ế ừ ớ DataInput và DataOutput.
Cỏc phương th c m i thờm vào bao g m: ứ ớ ồ
• seek( ): Thi t l p con tr t p tin t i v trớ c th bờn trong t p tin.ế ậ ỏ ậ ớ ị ụ ể ậ • getFilePointer( ): Tr v v trớ hi n hành c a con tr t p tin.ả ề ị ệ ủ ỏ ậ • length( ): Tr v chi u dài c a t p tin tớnh theo byte.ả ề ề ủ ậ
X. Đ i tố ượng System.in
Là m t đ i tộ ố ượng đ c bi t đặ ệ ượ ạc t o ra t l p InputStream. Nú giỳp ta đ c cỏc ký từ ớ ọ ự được người dựng gừ vào t bàn phớm, ta cú th s d ng phừ ể ử ụ ương th c read() ho c k t n i v iứ ặ ế ố ớ m t lu ng trung gian khỏc.ộ ồ
XI. Truy c p file ch đ tu n tậ ở ế ộ ầ ự
Khi làm vi c v i Java, t t c đ u là đ i tệ ớ ấ ả ề ố ượng. Trong cỏc ng d ng qu n lý ta thứ ụ ả ường xuyờn ph i đ c và ghi d li u v cỏc đ i tả ọ ữ ệ ề ố ượng lờn c ng. Cỏc l p ObjectInputStream vàổ ứ ớ ObjectOutputStream cho phộp chỳng ta đ c và ghi đ i tọ ố ượng vào file.
Đ cho phộp m t đ i tể ộ ố ượng c a m t l p cú th s d ng v i ObjectInputStrems vàủ ộ ớ ể ử ụ ớ ObjectOutputStreams, l p đú ph i khai bỏo cài đ t giao di n Serializable.ớ ả ặ ệ
Giao di n Serializable đệ ược bi t đ n nh là m t giao di n “đớnh kốm” b i vỡ b n thõnế ế ư ộ ệ ở ả nú khụng ch a b t kỳ m t phứ ấ ộ ương th c nào. M t class cài đ t giao di n này đứ ộ ặ ệ ược gỏn m tộ thụng bỏo r ng đ i tằ ố ượng c a l p là m t đ i tủ ớ ộ ố ượng Serializable. Đi u này r t quan tr ng b iề ấ ọ ở vỡ m t đ i tộ ố ượng ObjectOutputStream s khụng xu t m t đ i tẽ ấ ộ ố ượng tr khi đú là m t đ iừ ộ ố tượng Serializable.
Trong m t l p cài đ t Serializable, l p trỡnh viờn ph i đ m b o r ng m i bi n c a l pộ ớ ặ ậ ả ả ả ằ ọ ế ủ ớ ph i cú ki u Serializable ho c ph i khai bỏo m t bi n là transient đ b qua trong quỏ trỡnhả ể ặ ả ộ ế ể ỏ tu n t húa. M c đ nh thỡ t t c cỏc ki u d li u nguyờn th y đ u là tu n t húa. V i cỏcầ ự ặ ị ấ ả ể ữ ệ ủ ề ầ ự ớ ki u khụng nguyờn th y, ph i ki m tra xem đ nh nghĩa c a l p (ho c l p cha) cú cài đ tể ủ ả ể ị ủ ớ ặ ớ ặ Serializable hay khụng.
Sau đõy là m t vớ d v xõy d ng m t l p đ i tộ ụ ề ự ộ ớ ố ượng khỏch hàng cho m t ng d ngộ ứ ụ ngõn hàng sau đú ghi chỳng vào file:
import java.io.Serializable;
public class AccountRecord implements Serializable { private int account;
private String firstName; private String lastName;
private double balance; // Ch s n m gi hàng húa và d ch v c a khỏch hàng, s dỉ ố ắ ữ ị ụ ủ ố ư tài kho nả
public AccountRecord()// constructor khụng tham số {
this( 0, "", "", 0.0 ); }
public AccountRecord( int acct, String first, String last, double bal ) // Constructor cú tham số { setAccount( acct ); setFirstName( first ); setLastName( last ); setBalance( bal ); }
public void setAccount( int acct ) // é t s tài kho nặ ố ả {
account = acct; }
public int getAccount()// L y s tài kho nấ ố ả {
return account; }
public void setFirstName( String first ) // é t giỏ tr cho ph n h đ mặ ị ầ ọ ệ {
firstName = first; }
public String getFirstName()// L y ph n h đ mấ ầ ọ ệ {
return firstName; }
public void setLastName( String last ) // é t giỏ tr cho tờnặ ị {
lastName = last; }
public String getLastName()// L y tờnấ {
return lastName; }
public void setBalance( double bal ) // Đ t giỏ tr cho balanceặ ị {
balance = bal; }
public double getBalance()// L y s dấ ố ư