Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
651,48 KB
Nội dung
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à OutputStream là hai lp c s tru tng cho các lung hng byte, mi lân c/ ghi ra lung là c/ ghi 8 bit d liu ra lung, Hình sau th hin mi quan h phân cp gia lp c/ ghi hng byte Trang 106 tng t gia hai lung hng byte và hng kí t p Reader và InputStream có mt giao din ging nhau, chúng ch khác nhau v kiu d liu c vào, ví d lp Reader có các phng thc sau giúp cho vic c mt kí t hoc t mng các kí t int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) Thì trong lp InputStream cng có các phng thc vi tên tng t cho vic c t byte hoc mt mng các byte int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) Cng tng t vy lp Writer và OutputStream cng có mt giao din tng t nhau, ví d lp Writer nh ngha các phng thc ghi mt kí t, mt mng các kí t ra lung int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length) Thì lp OutputStream cng có các phng thc tng ng, ghi mt byte, mt ng byte ra lung int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length) lý tp tin x lý tp tin ngoi trú, ta s dng các lung liên quan n tp tin nh FileInputStream và FileOutputStream cho vic c ghi tp hng byte, FileReader 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 { File inputFile = new File("farrago.txt"); File outputFile = new File("outagain.txt"); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while ((c = in.read())! = -1) out.write(c); in.close(); out.close(); } } Lung d liu c/ ghi các kiu d liu nguyên thu, ta s dng lung DataInputStream và DataOutputStream, lp DataInputStream trin khai giao din DataInput, còn lp DataOutputStream trin khai giao din DataOuput Các phng thc sau c nh ngha trong giao din DataOutput void write(byte[] b) Ghi mt mng byte ra lung void write(byte[] b, int off, int len) Ghi mt mng byte ra lung k t v trí off, Trang 108 len byte void write(int b) Ghi mt byte ra lung void writeBoolean(boolean v) Ghi mt giá tr logic ra lung void writeByte(int v) Ghi ra lung phn thp ca v void writeBytes(String s) Ghi mt xâu ra lung void writeChar(int v) Ghi mt kí t ra lung void writeChars(String s) Ghi mt xâu kí t ra lung void writeDouble(double v) Ghi mt s double ra lung void writeFloat(float v) Ghi mt s thc ra lung void writeInt(int v) Ghi mt s nguyên ra lung void writeLong(long v) Ghi mt s long ra lung void writeShort(int v) Ghi mt s short ra lung 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 out.writeLong(123456789); // ghi s long Trang 109 out.writeDouble(123.456789); // ghi s thc chính xác kép out.writeFloat(123.456789f); // ghi s thc chính xác n out.writeBoolean(true); // ghi giá tr logic out.writeUTF("Day la mot xau ki tu"); // ghi mt xâu out.close(); // read it in again DataInputStream in = new DataInputStream(new FileInputStream("c:/TestIO.txt")); try { System.out.println("Gia tri nguyen " + in.readInt()); // c li s nguyên System.out.println("Gia tri long " + in.readLong()); // c li s nguyên dài System.out.println("Gia tri double " + in.readDouble());// c li s thc chính xác kép System.out.println("Gia tri float " + in.readFloat()); // c li s thc chính xác n System.out.println("Gia tri boolean " + in.readBoolean()); // c li giá tr logic System.out.println("Gia tri xau " + in.readUTF()); // c li mt xâu unicode } catch (EOFException e) { System.out.println("loi");} in.close(); } } 1.3. Lung in n Vì các lung xut ghi d liu ra di dng nh phân do vy bn không th dùng lnh type, hoc các chng trình son tho asciii xem c, trong java có th s dng lung in n xut d liu ra di dng asciii. Lp PrintStream và PrintWriter s giúp ta làm vic này. Hai lp này thc hin chc nng nh nhau, u xut ra d liu dng asciii. t s phng thc ca lp PrintStream: boolean checkError() n ht d liu ra và kim tra li lung void close() óng lung 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 Trang 110 void println(char[] x) ghi mt mange kí t và xung dòng void println(double x) ghi mt s thc chính xác kép và xung dòng void println(float x) ghi mt s thc và xung dòng void println(int x) ghi mt s nguyên và xung dòng void println(long x) ghi mt s nguyên dài và xung dòng void println(Object x) ghi mt i tng và xung dòng void println(String x) ghi mt xâu và xung dòng protected void setError() t trng thái li ca lung là true void write(byte[] buf, int off, int len) ghi mng byte t v trí off len kí byte ra lung void write(int b) ghi mt byte ra lung Hàm to ca lp PrintStream: PrintStream(OutputStream out) to ra mt lung mi PrintStream(OutputStream out, boolean autoFlush) to ra mt lung mi vi chc nng AutoFlush ( t dn) t s phng thc ca lp PrintWriter boolean checkError() n ht d liu ra và kim tra li lung void close() óng lung 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 void println(char[] x) ghi mt mange kí t và xung dòng void println(double x) ghi mt s thc chính xác kép và xung dòng void println(float x) ghi mt s thc và xung dòng void println(int x) ghi mt s nguyên và xung dòng Trang 111 void println(long x) ghi mt s nguyên dài và xung dòng void println(Object x) ghi mt i tng và xung dòng void println(String x) ghi mt xâu và xung dòng protected void setError() t trng thái li ca lung là true void write(byte[] buf, int off, int len) ghi mng byte t v trí off len kí byte ra lung void write(int b) ghi mt byte ra lung void write(int c) Ghi mt kí tn void write(String s) Ghi mt xâu void write(String s, int off, int len) Ghi mt xâu len kí t tính t v trí off Các hàm to ca lp PrintWriter - PrintWriter(OutputStream out) to ra mt PrintWriter không có chc nng t dn t mt i tng OutputStream. - PrintWriter(OutputStream out, boolean autoFlush) to ra mt PrintWriter vi chc nng dn t mt i tng OutputStrea. - PrintWriter(Writer out) to ra mt PrintWriter không có chc nng t dn t mt i ng Writer - PrintWriter(Writer out, boolean autoFlush) to ra mt PrintWriter vi chc nng t dn t t i tng Writer Sau ây là mt ví d v lung in n, ví d này in ra mt tp mt s nguyên, mt s thc và mt xâu kí t, sau khi chy chng trình bn có th s dng lnh type ca DOS xem import java.io.*; public class DataIODemo1 { public static void main(String[] args) throws IOException { // write the data out PrintWriter out = new PrintWriter(new FileOutputStream("c:/a.txt")); out.println(10); out.println(1.2345); out.print("xau ki tu"); out.close(); } } 1.4. Lung m Vì các thao tác vi cng, mng thng lâu hn rt nhiu so các thao tác vi b nh trong, do vy chúng ta cn phi có mt k thut nào ó tng tc c/ghi, k thut ó chính là vùng m, vi vùng m ta s gim c s ln c ghi lung, trong java ta có th o ra vùng m vi các lp BufferInputStream, BufferOutputStream, BufferReader, BufferWriter, thông thng bn s i các lung ca bn vào lung m. Trang 112 Các phng thc to dng lung m: public BufferInputStream( InputStream ) public BufferInputStream (InputStream in, int bufferSize) public BufferOutputStream ( OutputStream out) public BufferOutputStream ( OutputStream out, int bufferSize) public BufferReader ( Reader in) public BufferReader ( Reader in, int bufferSize) public BufferWriter ( Writer out) public BufferWriter ( Writer out, int bufferSize) p tin truy cp ngu nhiên t c các lung xét trên ch có thc, hoc ghi, chúng không thc ghi ng thi, ch duy nht có mt lp cho phép ta c ghi ng thi, ó là lp RandomAccessFile, p này trin khai giao din InputData và OutputData, nên chúng có tt c các phng thc a c 2 lp này, ngoài ra chúng còn có các phng thc sau: - public void seek(long pos) chuyn con trn v trí pos tính t v trí u tiên, chú ý v trí u tiên tính t 0 - public long getFilePointer() tr v v trí con tr tp tính bng byte, k ta u tp - public long length() tr v dài ca tp - public void writeChar(int v) ghi kí t unicode ra tp vi byte cao c ghi trc - public final void writeChars(String s) ghi mt xâu kí t ra tp ng t ging C/C++ khi bn m mt tp truy cp ngu nhiên bn phi ch rõ ch làm vic là c ‘r’, hay ghi ‘w’ hay c ghi ng thi ‘rw’, ví d nh bn mun m tp a.txt theo chc ghi ng thi thì bn dùng cú pháp RandomAccessFile =new RandomAccessFile(“C:/ a.txt”, “rw”) Chng trình di ây minh ho cách dùng lp RandomAccessFile. Nó ghi mt giá tr boolean, mt int, mt char, mt double ti mt file có tên ‘abc.txt’. Nó s dng phng pháp seek( ) tìm v trí nh v bên trong tp tin (bt u t 1). Sau ó nó c giá tr s nguyên, ký t và double t tp tin và hin th chúng ra màn hình. import java.lang.System; import java.io.RandomAccessFile; import java.io.IOException; public class rndexam{ public static void main (String args[ ]) throws IOException { RandomAccessFile rf; rf = new RandomAccessFile(abc.txt, rw); rf.writeBoolean(true); rf.writeInt(67868); rf.writeChars(); rf.writeDouble(678.68); //S dng phng thc seek() di chuyn con trn byte th hai rf.seek(1); System.out.println(rf.readInt()); System.out.println(rf.readChar()); System.out.println(rf.readDouble()); Trang 113 rf.seek(0); System.out.println(rf.readBoolean)); rf.close(); } } t qu xut ra ca chng trình: II. Lp File p File cung cp giao din chung x lý h thng tp c lp vi môi trng ca các máy tính. Mt ng dng có th s dng các chc nng chính ca File x lý tp hoc các th mc (directory) trong h thng tp. x lý các ni dung ca các tp thì s dng các lp FileInputStream, FileOutputStream và RandomAccessFile. p File nh ngha các thuc tính ph thuc vào môi trng (platform) c s dng x lý p và tên gi các ng dn trong các th mc mt cách c lp vi môi trng. public static final char separatorChar public static final String separator nh ngha các ký hiu hoc các xâu s dng ngn cách các thành phn trong tên a ng dn. Ký hiu ‘/’ ngn cách cho Unix, ‘\’ c s dng ngn cách các c ca ng dn trong Window. Ví d: C:\book\Java là tên ng dn trong Window. public static final char pathSeparatorChar public static final String pathSeparator nh ngha các ký hiu hoc các xâu s dng ngn cách các tp hoc tên th mc trong danh sách ca các ng dn. Ký hiu ngn cách ‘:’ cho Unix, ‘;’ c s dng phân cách các ng dn trong Window. Ví d: C:\book; C:\Java; D:\Anh\ABC; A:\Docs là danh sách các ng dn trong Window. File(String pathName) Gán ng dn có tên pathName cho i tng ca lp File. pathName có th là ng dn tuyt i (có c tên a, tên ca tt c các mc ln lt theo cây th c) hoc ng dn tngi (bt u t th mc hin thi). Ví d: File ch1 = new File(File.separator + “book” + File.separator + “chuong1”); File(File direct, String filename)
i
hình th c nào, lu tr âu thì jav au tr ut ng hoá thành các lu ng, u này là r t tinh vi nó làm cho ta không c n ph i quan tâm d li u c l u trâu, d i d ng th c nh th nào, nó ng nh t m i ngu n d li u v i nhau: (Trang 1)