Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
658,2 KB
Nội dung
Đ tài 6. Các lu ng vàora d li u v i fileề ồ ữ ệ ớ M t kh năng quan tr ng mà các ngôn ng l p trình ph i có là vi c qu n lý các lu ngộ ả ọ ữ ậ ả ệ ả ồ d li u vàora h th ng máy tính giúp các ch ng trình có th giao ti p d li u v i th gi iữ ệ ệ ố ươ ể ế ữ ệ ớ ế ớ bên ngoài. I. Khái ni m lu ng vàora (I/O stream)ệ ồ Lu ng là dòng ch y c a d li u. Có 2 lo i lu ng: ồ ả ủ ữ ệ ạ ồ • Lu ng nh p (input stream): là t t c gì t th gi i bên ngoài đ c đ a vào máyồ ậ ấ ả ừ ế ớ ượ ư tính, nh đ c t bàn phím, đ c t t p tin .ư ọ ừ ọ ừ ậ • Lu ng xu t (output stream): là t t c nh ng gì đ c g i t máy tính ra ngoàiồ ấ ấ ả ữ ượ ử ừ thông qua các thi t b ngo i vi, nh màn hình, máy in, t p tin, .ế ị ạ ư ệ Đ i v i m i lu ng l i có các dòng bao g m:ố ớ ộ ồ ạ ồ • L p System.out: Dòng xu t chu n dùng đ hi n th k t qu trên màn hình.ớ ấ ẩ ể ể ị ế ả • L p System.in: Dòng nh p chu n th ng đ n t bàn phím và đ c dùng đớ ậ ẩ ườ ế ừ ượ ể đ c các ký t d li u.ọ ự ữ ệ • L p System.err: Đây là dòng l i chu n cho phép m t ch ng trình đ a ra cácớ ỗ ẩ ộ ươ ư thông báo l i trên màn hình.ỗ Các dòng này có th b đ i h ng đ n nhi u ngu n khác nhau. Ví d System.err có thể ị ổ ướ ế ề ồ ụ ể đ a thông báo l i ra m t file. ư ỗ ộ Khi c n làm vi c v i lu ng, ta khai báo kh i th vi n:ầ ệ ớ ồ ố ư ệ import java.io.*; Th vi n này cho phép ta làm vi c v i các lu ng nh p xu t qua vi c cung c p các l p:ư ệ ệ ớ ồ ậ ấ ệ ấ ớ FileInputStrem, FileOutputStream, FileReader, FileWriter và r t nhi u l p khác. ấ ề ớ S phân c p các class trong gói java.io th hi n qua b ng sau:ự ấ ể ệ ả java.lang.Objec t File FileDescriptor InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream PushbackInputStream ObjectInputStream PipedInputStream SequenceInputStream OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream 78 ObjectOutputStream PipedOutputStream RandomAccessFile Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushbackReader InputStreamReader FileReader PipedReader StringReader Writer BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter PipedWriter PrintWriter StringWriter Sau đây chúng ta xem xét các class quan tr ng th ng đ c s d ng:ọ ườ ượ ử ụ II. L p InputStream:ớ 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.ươ ứ ị ị ạ ị ượ ầ ố Nó gây ra ngo i l IOException n u l i x y ra. ạ ệ ế ỗ ả 79 • 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.ư ụ 80 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ể ự ồ ạ } } 81 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 82 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àofile 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) { 83 // 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 filera 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: 85 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; } 86 public double getBalance()// L y s dấ ố ư { return balance; } } Ch ng trình sau đây s ghi các đ i t ng vàofile C:\LETI\JAVA\Account.txtươ ẽ ố ượ import java.io.*; public class GhiFile { ObjectOutputStream output; public void openFile() { try { output = new ObjectOutputStream(new FileOutputStream( "C:\\LETI\\JAVA\\Account.txt") ); } catch ( IOException ioException ) { System.out.print("Loi mo file"); } } public void closeFile() // Ph ng th c đóng fileươ ứ { try { output.close(); System.exit( 0 ); } // N u có l i đóng fileế ỗ catch ( IOException ioException ) { System.exit( 1 ); } } public void addRecord(AccountRecord record) // Ph ng th c thêm 1 b n ghi vào fileươ ư ả { try { output.writeObject( record ); output.flush(); } catch(IOException ex) { System.out.print("Loi ghi file"); } } 87 [...]... main(String[] argvs) { DocFile d = new DocFile(); d.openFile(); System.out.println(d.readFile()); System.out.println(d.readFile()); d.closeFile(); }} XII Truy cập file nhị phân Ngoài các công cụ thao tác trên file văn bản, Java h ỗ tr ợ c ả các thao tác v ới file nh ị phân dùng các đối tượng: • DataOutputStream: Hỗ trợ ghi file ở chế độ nhị phân tức là từng byte • DataInputStream: Hỗ trợ đọc file ở chế độ nhị... rafile 2 Cho một file có dữliệu về thí sinh thi hoa hậu như sau: 001, Tran Thi Mong Mo, 1.98, Ha Tay 002, Bùi Thị Thanh Nhàn, 1.89, Ha Noi 003, Nguyen Thu Thuy, 1.70, Ha Nam 009, Phan Anh Thu, 1.78, Thanh Hoa Các dữliệu lần lượt mô tả về: Mã số, Họ và tên, chiều cao, Quê quán Viết một chương trình đọc dữliệu của filera và gán mỗi dòng cho một đ ối t ượng HOAHAU 3 Viết một chương trình copy dữ liệu. .. Tất nhiên là cácfile văn bản cũng có thể đọc ghi ở chế độ nhị phân Chương trình sau đây copy dữliệu giữa hai file dạng doc: import java.io.*; public class BinaryAccess { public static void main(String[] argvs) { java.io.DataOutputStream out; // Luồngra hỗ trợ ghi file nhị phân java.io.DataInputStream in; // Luồngvào hỗ trợ đọc file nhị phân try { in = new java.io.DataInputStream(new FileInputStream("C:\\P.doc"));... 12346,"Phan Tien ","Minh",-5.12); GhiFile g = new GhiFile(); g.openFile(); g.addRecord(record1); g.addRecord(record2); g.closeFile(); }} Chương trình sau đây đọc ra 2 bản ghi vừa được ghi ở chương trình trên và in ra màn hình: import java.io.*; public class DocFile { java.io.ObjectInputStream input; public void openFile() // Mở file { try { input = new java.io.ObjectInputStream(new FileInputStream("C:\\LETI\\JAVA\\Account.txt"));... java.io.DataOutputStream(new FileOutputStream("C:\\G.doc")); int bytesAvailable = in.available(); // số byte của file if (bytesAvailable > 0) { byte[] data = new byte[bytesAvailable]; in.read(data); // Đọc các byte ra một mảng byte out.write(data); // Ghi mảng byte này vào một file khác } in.close(); out.close(); 89 } catch (Exception ex) {} }} Bài tập 1 Viết một chương trình nhập vào một chuỗi từ bàn phím sau đó ghi chuỗi ra. .. chiều cao, Quê quán Viết một chương trình đọc dữliệu của filera và gán mỗi dòng cho một đ ối t ượng HOAHAU 3 Viết một chương trình copy dữ liệu từ một file văn bản sang một file văn bản khác 4 Viết chương trình copy dữ liệu từ một file ảnh GIF sang một file ảnh GIF khác 90 ... java.io.ObjectInputStream(new FileInputStream("C:\\LETI\\JAVA\\Account.txt")); } catch(IOException e) { System.out.print("Loi mo file" ); } } public void closeFile() //Đóng file { try { input.close(); System.exit( 0 ); } catch ( IOException ioException ) { System.exit( 1 ); } } // Phương thức đọc 1 bản ghi public String readFile() { String account=""; try { AccountRecord a = (AccountRecord)input.readObject(); 88 account =String.valueOf( . 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. ạ • 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