1. Trang chủ
  2. » Công Nghệ Thông Tin

Nhập xuất

16 332 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Trang 104 Chng 5: NHP XUT (Input/Output) Mt chng trình thng xuyên làm vic vi d liu,  có th lu tr lâu dài chúng ta phi lu tr và nhn li d liu t thit b lu tr ngoài, ngun thông tin ngoài không ch gm d liu c lu tr trên a t, a CD mà nó có th là d liu ca mt chng trình khác, hoc có th là c lu tr trên mng… dù chúng c lu trâu chúng cng ch có 1 s dng nh: i ng, kí t, hình nh hoc âm thanh, dù d liu c lu tr i hình thc nào, lu trâu thì java u tru t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:  nhn v các thông tin, mt chng trình m mt lung liên kt vi i tng ngun( tp tin, b nh, Socket) và c các thông tin tun t. ng t ghi thông tin ra các thit b ngoài bng cách m mt lung n i tng ích và ghi thông tin ra mt cách tun t nh Lung là s tru tng hoá  mc cao, do vy bt k d liu c c vào tâu hoc ghi ra âu, thì thut toán c/ghi tun tu ta nh sau: Trang 105 I. Lp lung Java a ra nhiu lp lung,  x lý mi loi d liu, java chia lung ra thanh 2 loi: lung byte ( byte stream) và lung kí t (character stream), lp InputStream và OutputStream là hai lp c s cho mi lung nhp xut hng byte, và lp Reader/ Writer là hai lp c s cho vic c ghi hng kí t. p RandomAccessFile k tha t lp Object và trin khai giao din, InputStream và OutputStream, ây là lp duy nht h tr cc ln ghi. 1.1. Lp nhp, xut hng kí t Reader và Writer là hai lp c s tru tng cho lung hng kí t, hai lp này cung cp t giao din chung cho tt c các lp c/ ghi hng kí t, mi ln c/ ghi ra lung là c 2 byte tng ng vi mt kí t unicode, Sau ay là mô hình phân cp các lp c/ ghi ng kí t 1.2. Lung hng byte   có thc ghi 1 byte, ta phi s dng lung hng byte, hai lp InputStream và OutputStream là hai lp c s tru tng cho các lung hng byte, mi lân c/ ghi ra lung là c/ ghi 8 bit d liu ra lung, Hình sau th hin mi quan h phân cp gia lp c/ ghi hng byte Trang 106  tng t gia hai lung hng byte và hng kí t p Reader và InputStream có mt giao din ging nhau, chúng ch khác nhau v kiu d liu c vào, ví d lp Reader có các phng thc sau giúp cho vic c mt kí t hoc t mng các kí t int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) Thì trong lp InputStream cng có các phng thc vi tên tng t cho vic c t byte hoc mt mng các byte int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) Cng tng t vy lp Writer và OutputStream cng có mt giao din tng t nhau, ví d lp Writer nh ngha các phng thc  ghi mt kí t, mt mng các kí t ra lung int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length) Thì lp OutputStream cng có các phng thc tng ng,  ghi mt byte, mt ng byte ra lung int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length)  lý tp tin   x lý tp tin ngoi trú, ta s dng các lung liên quan n tp tin nh FileInputStream và FileOutputStream cho vic c ghi tp hng byte, FileReader và FileWriter cho vic c ghi hng kí t, thông thng mun s dng lung tp tin ta s ng hàm to ca các lp tng ng  liên kt lung vi mt tp 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: Vit chng trình file copy, thc hin vic copy mt tp, ta s vit chng trình này  dng c 2 lung hng byte và hng kí t import java.io.*; // chng trình copy s dng lung hng 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.*; // Chng trình copy s dng lung hng 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(); } } Lung d liu  c/ ghi các kiu d liu nguyên thu, ta s dng lung DataInputStream và DataOutputStream, lp DataInputStream trin khai giao din DataInput, còn lp DataOutputStream trin khai giao din DataOuput Các phng thc sau c nh ngha trong giao din DataOutput void write(byte[] b) Ghi mt mng byte ra lung void write(byte[] b, int off, int len) Ghi mt mng byte ra lung k t v trí off, Trang 108 len byte void write(int b) Ghi mt byte ra lung void writeBoolean(boolean v) Ghi mt giá tr logic ra lung void writeByte(int v) Ghi ra lung phn thp ca v void writeBytes(String s) Ghi mt xâu ra lung void writeChar(int v) Ghi mt kí t ra lung void writeChars(String s) Ghi mt xâu kí t ra lung void writeDouble(double v) Ghi mt s double ra lung void writeFloat(float v) Ghi mt s thc ra lung void writeInt(int v) Ghi mt s nguyên ra lung void writeLong(long v) Ghi mt s long ra lung void writeShort(int v) Ghi mt s short ra lung void writeUTF(String str) Chi mt xâu kí t Unicode ra lung Các phng thc sau c nh ngha trong giao din DataInput: boolean readBoolean() c mt giá tr logic t lung byte readByte() c mt byte t lung char readChar() c mt kí t t lung double readDouble() c mt s double t lung float readFloat() c mt s float t lung void readFully(byte[] b) c mt mng byte t lung và ghi vào ng voidreadFully(byte[] b, int off, int len) c len byte t lung và ghi vào mng  v trí off int readInt() c mt s nguyên String readLine() c mt xâu kí t cho n khi gp kí t xung dòng và b qua kí t xung dòng long readLong() c mt s long short readShort() c mt s short int readUnsignedByte() c mt s nguyên không du trong khong 0 255 in treadUnsignedShort() c mt s nguyên không du trong n t 0 65535 String readUTF() c mt xâu kí t Unicode int skipBytes(int n)  qua n byte t lung Sau ây là mt ví d nh v lung nhp xut d liu, ví d này ghi d liu ra tp ri li 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 thc chính xác kép out.writeFloat(123.456789f); // ghi s thc chính xác n out.writeBoolean(true); // ghi giá tr logic out.writeUTF("Day la mot xau ki tu"); // ghi mt 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 li s nguyên System.out.println("Gia tri long " + in.readLong()); // c li s nguyên dài System.out.println("Gia tri double " + in.readDouble());// c li s thc chính xác kép System.out.println("Gia tri float " + in.readFloat()); // c li s thc chính xác n System.out.println("Gia tri boolean " + in.readBoolean()); // c li giá tr logic System.out.println("Gia tri xau " + in.readUTF()); // c li mt xâu unicode } catch (EOFException e) { System.out.println("loi");} in.close(); } } 1.3. Lung in n Vì các lung xut ghi d liu ra di dng nh phân do vy bn không th dùng lnh type, hoc các chng trình son tho asciii  xem c, trong java có th s dng lung in n  xut d liu ra di dng asciii. Lp PrintStream và PrintWriter s giúp ta làm vic này. Hai lp này thc hin chc nng nh nhau, u xut ra d liu dng asciii. t s phng thc ca lp PrintStream: boolean checkError() n ht d liu ra và kim tra li lung void close() óng lung void flush() n d liu trong vùng m ra void print(boolean b) ghi giá tr logic ra lung void print(char c) ghi kí t void print(char[] s) ghi mt mange kí t void print(double d) ghi mt s thc  chính xác kép void print(float f) ghi mt s thc void print(int i) ghi mt s nguyên void print(long l) ghi mt s nguyên dài void print(Object obj) ghi mt i tng void print(String s) ghi mt xâu void println() o ra mt dòng trng void println(boolean x) ghi giá tr logic ra lung và xung dòng void println(char x) ghi kí t và xung dòng Trang 110 void println(char[] x) ghi mt mange kí t và xung dòng void println(double x) ghi mt s thc  chính xác kép và xung dòng void println(float x) ghi mt s thc và xung dòng void println(int x) ghi mt s nguyên và xung dòng void println(long x) ghi mt s nguyên dài và xung dòng void println(Object x) ghi mt i tng và xung dòng void println(String x) ghi mt xâu và xung dòng protected void setError() t trng thái li ca lung là true void write(byte[] buf, int off, int len) ghi mng byte t v trí off len kí byte ra lung void write(int b) ghi mt byte ra lung Hàm to ca lp PrintStream: PrintStream(OutputStream out) to ra mt lung mi PrintStream(OutputStream out, boolean autoFlush) to ra mt lung mi vi chc nng AutoFlush ( t dn) t s phng thc ca lp PrintWriter boolean checkError() n ht d liu ra và kim tra li lung void close() óng lung void flush() n d liu trong vùng m ra void print(boolean b) ghi giá tr logic ra lung void print(char c) ghi kí t void print(char[] s) ghi mt mange kí t void print(double d) ghi mt s thc  chính xác kép void print(float f) ghi mt s thc void print(int i) ghi mt s nguyên void print(long l) ghi mt s nguyên dài void print(Object obj) ghi mt i tng void print(String s) ghi mt xâu void println() o ra mt dòng trng void println(boolean x) ghi giá tr logic ra lung và xung dòng void println(char x) ghi kí t và xung dòng void println(char[] x) ghi mt mange kí t và xung dòng void println(double x) ghi mt s thc  chính xác kép và xung dòng void println(float x) ghi mt s thc và xung dòng void println(int x) ghi mt s nguyên và xung dòng Trang 111 void println(long x) ghi mt s nguyên dài và xung dòng void println(Object x) ghi mt i tng và xung dòng void println(String x) ghi mt xâu và xung dòng protected void setError() t trng thái li ca lung là true void write(byte[] buf, int off, int len) ghi mng byte t v trí off len kí byte ra lung void write(int b) ghi mt byte ra lung void write(int c) Ghi mt kí tn void write(String s) Ghi mt xâu void write(String s, int off, int len) Ghi mt xâu len kí t tính t v trí off Các hàm to ca lp PrintWriter - PrintWriter(OutputStream out) to ra mt PrintWriter không có chc nng t dn t mt i tng OutputStream. - PrintWriter(OutputStream out, boolean autoFlush) to ra mt PrintWriter vi chc nng  dn t mt i tng OutputStrea. - PrintWriter(Writer out) to ra mt PrintWriter không có chc nng t dn t mt i ng Writer - PrintWriter(Writer out, boolean autoFlush) to ra mt PrintWriter vi chc nng t dn t t i tng Writer Sau ây là mt ví d v lung in n, ví d này in ra mt tp mt s nguyên, mt s thc và mt xâu kí t, sau khi chy chng trình bn có th s dng lnh type ca 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. Lung m Vì các thao tác vi  cng, mng thng lâu hn rt nhiu so các thao tác vi b nh trong, do vy chúng ta cn phi có mt k thut nào ó  tng tc c/ghi, k thut ó chính là vùng m, vi vùng m ta s gim c s ln c ghi lung, trong java ta có th o ra vùng m vi các lp BufferInputStream, BufferOutputStream, BufferReader, BufferWriter, thông thng bn s i các lung ca bn vào lung m. Trang 112 Các phng thc to dng lung 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 cp ngu nhiên t c các lung xét trên ch có thc, hoc ghi, chúng không thc ghi ng thi, ch duy nht có mt lp cho phép ta c ghi ng thi, ó là lp RandomAccessFile, p này trin khai giao din InputData và OutputData, nên chúng có tt c các phng thc a c 2 lp này, ngoài ra chúng còn có các phng thc sau: - public void seek(long pos) chuyn con trn 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 tp tính bng byte, k ta u tp - public long length() tr v dài ca tp - public void writeChar(int v) ghi kí t unicode ra tp vi byte cao c ghi trc - public final void writeChars(String s) ghi mt xâu kí t ra tp ng t ging C/C++ khi bn m mt tp truy cp ngu nhiên bn phi ch rõ ch làm vic là c ‘r’, hay ghi ‘w’ hay c ghi ng thi ‘rw’, ví d nh bn mun m tp a.txt theo chc ghi ng thi thì bn dùng cú pháp RandomAccessFile =new RandomAccessFile(“C:/ a.txt”, “rw”) Chng trình di ây minh ho cách dùng lp RandomAccessFile. Nó ghi mt giá tr boolean, mt int, mt char, mt double ti mt file có tên ‘abc.txt’. Nó s dng phng pháp seek( )  tìm v trí nh v bên trong tp tin (bt u t 1). Sau ó nó c giá tr s nguyên, ký t và double t tp tin và hin 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 dng phng thc seek()  di chuyn con trn 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 xut ra ca chng trình: II. Lp File p File cung cp giao din chung  x lý h thng tp c lp vi môi trng ca các máy tính. Mt ng dng có th s dng các chc nng chính ca File  x lý tp hoc các th mc (directory) trong h thng tp. x lý các ni dung ca các tp thì s dng các lp FileInputStream, FileOutputStream và RandomAccessFile. p File nh ngha các thuc tính ph thuc vào môi trng (platform) c s dng  x lý p và tên gi các ng dn trong các th mc mt cách c lp vi môi trng. public static final char separatorChar public static final String separator nh ngha các ký hiu hoc các xâu s dng  ngn cách các thành phn trong tên a ng dn. Ký hiu ‘/’  ngn cách cho Unix, ‘\’ c s dng  ngn cách các c ca ng dn trong Window. Ví d: C:\book\Java là tên ng dn trong Window. public static final char pathSeparatorChar public static final String pathSeparator nh ngha các ký hiu hoc các xâu s dng  ngn cách các tp hoc tên th mc trong danh sách ca các ng dn. Ký hiu ngn cách ‘:’ cho Unix, ‘;’ c s dng  phân cách các ng dn trong Window. Ví d: C:\book; C:\Java; D:\Anh\ABC; A:\Docs là danh sách các ng dn trong Window. File(String pathName) Gán ng dn có tên pathName cho i tng ca lp File. pathName có th là ng dn tuyt i (có  c tên a, tên ca tt c các mc ln lt theo cây th c) hoc ng dn tngi (bt u t th mc hin thi). Ví d: File ch1 = new File(File.separator + “book” + File.separator + “chuong1”); File(File direct, String filename)

Ngày đăng: 29/09/2013, 09:20

Xem thêm: Nhập xuất

HÌNH ẢNH LIÊN QUAN

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: - Nhập xuất
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)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w