µÚ ¾Å Õ JavaÊä Èë Êä ³ö ²Ù ×÷

9.1 Java Êä Èë Êä ³ö Á÷

Ëù ÓÐ µÄ ³Ì Ðò Óï ÑÔ ¶¼ Ìá ¹© Óë ±¾ »ú ÎÄ ¼þ ϵ ͳ ½» »¥ µÄ ·½ ʽ£»JavaÒ² ²» Àý Íâ¡£ ÎÒ ÃÇ ½« ¿´ ¿´JavaÊÇ Ôõ Ñù ´¦ Àí ±ê ×¼ ÎÄ ¼þ Êä Èë Êä ³ö µÄ(°ü À¨stdin,stout,stderr)¡£ µ± Äã ÔÚ Íø Âç ÉÏ ¿ª ·¢ С ³Ì Ðò ʱ£¬ Äã ±Ø Ðë ×¢ Òâ Ö± ½Ó ÎÄ ¼þ Êä Èë Êä ³ö ÊÇ ²» °² È« Òò ËØ µÄ ¹Ø ¼ü¡£ ´ó ¶à Êý Óà »§ Éè Öà Ëû ÃÇ µÄ ä¯ ÀÀ Æ÷£¬ ¿É Èà Äã ×Ô ÓÉ µÄ ·Ã ÎÊ Ëû ÃÇ µÄ ÎÄ ¼þ ϵ ͳ£¬ µ« ÓРЩ ²» Èà Äã ·Ã ÎÊ¡£ µ± È»£¬ Èç ¹û Äã ¿ª ·¢ Äã ÄÚ ²¿ µÄ Ó¦ Óà ³Ì Ðò£¬ Äã Ò² Ðí Ðè Òª Ö± ½Ó ·Ã ÎÊ ÎÄ ¼þ¡£

±ê ×¼ Êä Èë Êä ³ö UnixµÄ Óà »§£¬ »ò Æä Ëû »ù ÓÚ Ãü Áî ÐРϵ ͳ µÄ Óà »§(ÈçDOS)£¬ ¶¼ Öª µÀ ±ê ×¼ Êä Èë Êä ³ö µÄ º¬ Òå¡£ ±ê ×¼ Êä Èë ÎÄ ¼þ ÊÇ ¼ü ÅÌ£¬ ±ê ×¼ Êä ³ö ÎÄ ¼þ ÊÇ Äã µÄ ÖÕ ¶Ë ÆÁ Ä»¡£ ±ê ×¼ ´í Îó Êä ³ö ÎÄ ¼þ Ò² Ö¸ Ïò ÆÁ Ä»£¬ Èç ¹û ÓÐ ±Ø Òª£¬ Ëü Ò² ¿É ÒÔ Ö¸ Ïò Áí Ò» ¸ö ÎÄ ¼þ ÒÔ ±ã ºÍ Õý ³£ Êä ³ö Çø ·Ö¡£

ϵ ͳ Àà Javaͨ ¹ý ϵ ͳ Àà ´ï µ½ ·Ã ÎÊ ±ê ×¼ Êä Èë Êä ³ö µÄ ¹¦ ÄÜ¡£ ÉÏ Ãæ Ìá µ½ µÄ Èý ¸ö ÎÄ ¼þ ÔÚ Õâ ¸ö ϵ ͳ Àà ÖРʵ ÏÖ£º Stdin System.in×÷ ΪInputStreamÀà µÄ Ò» ¸ö ʵ Àý À´ ʵ ÏÖstdin£¬ Äã ¿É ÒÔ Ê¹ ÓÃread()ºÍskip(long n)Á½ ¸ö ³É Ô± º¯ Êý¡£read()Èà Äã ´Ó Êä Èë ÖÐ ¶Á Ò» ¸ö ×Ö ½Ú£¬skip(long n)Èà Äã ÔÚ Êä Èë ÖÐ Ìø ¹ýn¸ö ×Ö ½Ú¡£

Stout System.out×÷ ΪPrintStreamÀ´ ʵ ÏÖstdout£¬ Äã ¿É ÒÔ Ê¹ ÓÃprint()ºÍprintln()Á½ ¸ö ³É Ô± º¯ Êý¡£ Õâ Á½ ¸ö º¯ Êý Ö§ ³ÖJavaµÄ ÈÎ Òâ »ù ±¾ Àà ÐÍ ×÷ Ϊ ²Î Êý¡£

Stderr System.errͬstdoutÒ» Ñù ʵ ÏÖstderr¡£ ÏóSystem.outÒ» Ñù£¬ Äã ¿É ÒÔ ·Ã ÎÊPrintStream ³É Ô± º¯ Êý¡£

9.2 ±ê ×¼ Êä Èë Êä ³ö Àý ×Ó

Õâ Àï ÓÐ Ò» ¸ö Àý ×Ó£¬ ¹¦ ÄÜ ÏóUnixÀï µÄcat»òtype£º

import java.io.* class myCat{ public void main(String args[]) throws IOException{ int b; int count = 0; while ((b = System.in.read()) != -1){ count++; System.out.print((char)b); } System.out.println(); //blank line System.err.println("counted"+count+"total bytes."); } }

9.3 ÆÕ ͨ Êä Èë Êä ³ö Àà

³ý ÁË »ù ±¾ µÄ ¼ü ÅÌ Êä Èë ºÍ ÆÁ Ä» Êä ³ö Í⣬ ÎÒ ÃÇ »¹ Ðè Òª Áª ϵ ÎÄ ¼þ µÄ Êä Èë Êä ³ö¡£ ÎÒ ÃÇ ½« ѧ ϰ ÏÂ Ãæ ¼¸ ¸ö Àࣺ l FileInputStream l DataInputStream l FileOutputStream l DataOutputStream

×÷ Ϊ ²Î ¿¼£¬ ÔÙ ÁÐ ³ö Ò» Щ ÌØ ¶¨ Ó¦ Óà µÄ Àࣺ l PipedInputStream l BufferedInputStream l PushBackInputStream l StreamTokenizer l PipedOutputStream l BufferedOutputStream l RandomAccessFile

ÎÒ ÃÇ ²» ÔÚ ´Ë ÌÖ ÂÛ Õâ Щ À࣬ µ« Äã ¿É ÒÔ ÔÚJAVA_HOME/src/java/ioÄ¿ ¼ Àï ²é ¿´ ÿ ¸ö Àà µÄ ³É Ô± º¯ Êý ¶¨ Òå¡£

9.4 ÎÄ ¼þ

ÔÚ ÎÒ ÃÇ ½ø ÐÐ ÎÄ ¼þ ²Ù ×÷ ʱ£¬ Ðè Òª Öª µÀ Ò» Щ ¹Ø ÓÚ ÎÄ ¼þ µÄ ЊϢ¡£FileÀà Ìá ¹© ÁË Ò» Щ ³É Ô± º¯ Êý À´ ²Ù ×Ý ÎÄ ¼þ ºÍ »ñ µÃ Ò» Щ ÎÄ ¼þ µÄ ЊϢ¡£

9.4.1 ´´ ½¨ Ò» ¸ö РµÄ ÎÄ ¼þ ¶Ô Ïó

Äã ¿É Óà ÏÂ Ãæ Èý ¸ö ·½ ·¨ À´ ´´ ½¨ Ò» ¸ö РÎÄ ¼þ ¶Ô Ïó£º

File myFile; myFile = new File("etc/motd");

»ò

myFile = new File("/etc","motd"); //more useful if the directory or filename are variables

»ò

File myDir = new file("/etc"); myFile = new File(myDir,"motd");

Õâ Èý ÖÖ ·½ ·¨ È¡ ¾ö ÓÚ Äã ·Ã ÎÊ ÎÄ ¼þ µÄ ·½ ʽ¡£ Àý È磬 Èç ¹û Äã ÔÚ Ó¦ Óà ³Ì Ðò Àï Ö» Óà һ ¸ö ÎÄ ¼þ£¬ µÚ Ò» ÖÖ ´´ ½¨ ÎÄ ¼þ µÄ ½á ¹¹ ÊÇ ×î ÈÝ Ò× µÄ¡£ µ« Èç ¹û Äã ÔÚ Í¬ Ò» Ä¿ ¼ Àï ´ò ¿ª Êý ¸ö ÎÄ ¼þ£¬ Ôò µÚ ¶þ ÖÖ »ò µÚ Èý ÖÖ ½á ¹¹ ¸ü ºÃ Ò» Щ¡£

9.4.2 ÎÄ ¼þ ²â ÊÔ ºÍ ʹ ÓÃ

Ò» µ© Äã ´´ ½¨ ÁË Ò» ¸ö ÎÄ ¼þ ¶Ô Ïó£¬ Äã ±ã ¿É ÒÔ Ê¹ Óà ÒÔ Ï ³É Ô± º¯ Êý À´ »ñ µÃ ÎÄ ¼þ Ïà ¹Ø ÐŠϢ£º

ÎÄ ¼þ Ãû l String getName() l String getPath() l String getAbslutePath() l String getParent() l boolean renameTo(File newName)

ÎÄ ¼þ ²â ÊÔ l boolean exists() l boolean canWrite() l boolean canRead() l boolean isFile() l boolean isDirectory() l boolean isAbsolute()

Ò» °ã ÎÄ ¼þ ЊϢ l long lastModified() l long length()

Ä¿ ¼ Óà ·¨ l boolean mkdir() l String[] list()

9.4.3 ÎÄ ¼þ ЊϢ »ñ È¡ Àý ×Ó ³Ì Ðò

Õâ Àï ÊÇ Ò» ¸ö ¶À Á¢ µÄ ÏÔ Ê¾ ÎÄ ¼þ µÄ »ù ±¾ ЊϢ µÄ ³Ì Ðò£¬ ÎÄ ¼þ ͨ ¹ý Ãü Áî ÐÐ ²Î Êý ´« Ê䣺

import java.io.*; class fileInfo{ File fileToCheck; public static void main(String args[]) throws IOException{ if (args.length>0){ for (int i=0;i<args.length;i++){ fileToCheck = new File(args[i]); info(fileToCheck); } } else{ System.out.println("No file given."); } } public void info (File f) throws IOException { System.out.println("Name: "+f.getName()); System.out.println("Path: "=f.getPath()); if (f.exists()) { System.out.println("File exists."); System.out.print((f.canRead() ?" and is Readable":"")); System.out.print((f.cnaWrite()?" and is Writeable":"")); System.out.println("."); System.out.println("File is " + f.lenght() = " bytes."); } else { System.out.println("File does not exist."); } } }

9.5 Êä Èë Á÷

InputStream SequenceInputStream FileInputStream PipedInputStream ByteArrayInputStream FileterInputStream StringBufferInputStream

DataInputStream LineNumberInputStream PushbackInputStream BufferedInputStream ÓÐ ºÃ ¼¸ ¸ö Àà ÊÇ ×¨ ÃÅ Óà À´ ´¦ Àí ÎÄ ¼þ Êä Èë µÄ¡£ ÏÂ Ãæ ÊÇ ÎÄ ¼þ Êä Èë Àà µÄ ²ã ´Î ½á ¹¹£º

9.5.1 FileInputStream ¶Ô Ïó

FileInputStreamµä ÐÍ µØ ±í ʾ Ò» ÖÖ Ë³ Ðò ·Ã ÎÊ µÄ ÎÄ ±¾ ÎÄ ¼þ¡£ ͨ ¹ý ʹ ÓÃFileInputStreamÄã ¿É ÒÔ ·Ã ÎÊ ÎÄ ¼þ µÄ Ò» ¸ö ×Ö ½Ú¡¢ ¼¸ ¸ö ×Ö ½Ú »ò Õû ¸ö ÎÄ ¼þ¡£

9.5.2 ´ò ¿ªFileInputStream

Ϊ Ò» ¸ö ÎÄ ¼þ ´ò ¿ª Êä Èë Á÷FileInputStream£¬ Äã ±Ø Ðë ½« ÎÄ ¼þ Ãû »ò ÎÄ ¼þ ¶Ô Ïó ´« ËÍ ¸ø ½á ¹¹£º

FileInput Stream myFileStream; myFileStream = new FileInputStream ( "/etc/motd");

Äã »¹ ¿É ÒÔ Ïó Ï ±ß Õâ Ñù ´ÓFileInputStreamÀï ¶Á ÎÄ ¼þ ЊϢ£º

File myFile ; FileInputSteam myFileStream; myFile = new File("/etc/motd"); myFileStream = new FileInputStream(myFile);

Ò» µ©FileInputStreamÊä Èë Á÷ ´ò ¿ª£¬ Äã ¾Í ¿É ÒÔ ´Ó Àï Ãæ ¶Á È¡ ЊϢ ÁË¡£read()³É Ô± º¯ Êý ÓÐ ÒÔ Ï ¼¸ ÖÖ Ñ¡ Ï

l int read() //reads one byte //return -1 at end of stream l int read(byte b[]) //fills entire array,if possible //returns number of bytes read //returns -1 if end of stream is reached

l int read(byte b[],int offset, int len) //reads len bytes into b starting at b[offset] //Returns number of bytes read, //or -1 if end of stream is reached.

9.5.3 ¹Ø ±ÕFileInputStream

µ± Äã Íê ³É Ò» ¸ö ÎÄ ¼þ µÄ ²Ù ×÷£¬ Äã ¿É Ñ¡ Á½ ÖÖ ·½ ·¨ ¹Ø ±Õ Ëü£º ÏÔ Ê½ ¹Ø ±Õ ºÍ Òþ ʽ ¹Ø ±Õ£¬ Òþ ʽ ¹Ø ±Õ ÊÇ ×Ô ¶¯ À¬ »ø »Ø ÊÕ Ê± µÄ ¹¦ ÄÜ¡£

ÏÔ Ê½ ¹Ø ±Õ Èç Ï£º myFileStream.close();

9.6 Àý ³Ì£º ÏÔ Ê¾ Ò» ¸ö ÎÄ ¼þ

Èç ¹û ÎÄ ¼þ µÄ ·Ã ÎÊ È¨ ÏÞ ×ã ¹»£¬ Äã ¿É ÒÔ ÔÚTextArea¶Ô Ïó Àï ÏÔ Ê¾ ÎÄ ¼þ ÄÚ ÈÝ¡£

ÏÂ Ãæ ÊÇ ÏÔ Ê¾ ÎÄ ¼þ µÄ ³Ì Ðò Ƭ ¶Ï£º

FileInputStream fis; TextArea ta; public vod init(){ byte b[] = new byte [1024]; int I; //make it big enough or wait until you //know the size of the file String s; try { fis = new FileInputStream("/etc/motd"); } catch(FileNotFoundException e) { /*do something appropriate */ } try { I= fis.read(b); } catch(IOException e) { /* do something appropriate */ } s = new String(b, 0); ta = new TextArea(s,5,40); add (ta); }

9.7 DataInputStreams

DataInputStreamsÓëFileInputStreams²î ²» ¶à¡£DataÁ÷ ¿É ÒÔ Ö± ½Ó ¶Á ÈÎ Òâ Ò» ÖÖ ±ä Á¿ Àà ÐÍ£¬ È縡 µã Êý£¬ Õû Êý ºÍ ×Ö ·û µÈ¡£ Ò» °ã À´ ˵£¬ ¶Ô ¶þ ½ø ÖÆ ÎÄ ¼þ ʹ ÓÃDataInputStreamÁ÷¡£

9.7.1 ´ò ¿ª ºÍ ¹Ø ±ÕDataInputStreams

´ò ¿ª ºÍ ¹Ø ±ÕDataInputStreams¶Ô Ïó ʱ£¬ Æä ·½ ·¨ ÓëFileInputStreamsÏà ͬ£º

DataInputStreams myDataStream; FileInputStreams myFileStream;

//get a file handle myFileStream = new FileInputStream("/usr/db/stock.dbf"); //open,or "chain" a data input file myDataStream = new DataOutputStream(myFileStream);

//Now we can use both input streams to access our file //j(If we want to...) myFileStream.read(b); I = myDataStrea.readInt();

//close the data friel explicityly //Always close the "topmost" file stream myDataStream.close(); myFileStream.close();

9.7.2 ¶ÁDataInputStreams

µ± Äã ´ÓDataInputStreamsÁ÷ Àï ·Ã ÎÊ ÎÄ ¼þ ʱ£¬ Äã ¿É ÒÔ Ê¹ Óà ÓëFileInputStreamÁ÷ Ïà ͬ µÄ ³É Ô± º¯ Êý read()¡£ µ« Äã Ò² ¿É ÒÔ Ê¹ Óà Æä Ëû ·Ã ÎÊ ·½ ·¨ À´ ¶Á È¡ ²» ͬ ÖÖ Àà µÄ Êý ¾Ý£º

l byte readByte() l int readUnsignedByte() l short readShort() l int readUnsighedShort() l char readChar() l int readInt l long readLong() l float readFloat() l double readDouble() l String readLine()

ÒÔ ÉÏ Ã¿ Ò» ¸ö ³É Ô± º¯ Êý ¶¼ ¶Á È¡ Ïà Ó¦ µÄ Êý ¾Ý ¶Ô Ïó¡£ ÏóString readLine()³É Ô± º¯ Êý£¬ Äã ¿É Ê¹ ÓÃ\n,\r,\r\n,»òEOF×÷ Ϊ ×Ö ·û ´® ½á Êø ·û¡£

¶Á Ò» ¸ö ³¤ Õû ÐÍ£¬ Àý È磺

long serialNo; ... serialNo = myDataStream.readLong();

9.8 URL Êä Èë Á÷

³ý ÁË »ù ±¾ ÎÄ ¼þ ·Ã ÎÊ Í⣬Java»¹ Ìá ¹© ÁË Í¨ ¹ý Íø Âç ʹ ÓÃURL·Ã ÎÊ ¶Ô Ïó µÄ ¹¦ ÄÜ¡£ ÔÚ ÏÂ Ãæ Õâ ¸ö Àý ×Ó À ÎÒ ÃÇ ÓÃgetDocumentBase()³É Ô± º¯ Êý ²¢ ÏÔ Ê½ Ö¸ ¶¨URL¶Ô Ïó À´ ·Ã ÎÊ Éù Òô ºÍ ͼ Ïó¡£

String imageFile = new String ("images/Duke/T1.gif"); images[0] = getImage(getDocumentBase(),imageFile();

Èç ¹û ÎÒ ÃÇ Ô¸ Ò⣬ ¿É ÒÔ Ö± ½Ó ʹ ÓÃURL: URL imageSource; imageSource = new URL("http://555-1212.com/~info"); images[0] = getImage(imageSource,"Duke/T1.gif");

ÎÒ ÃÇ ¿É ÒÔ Îª Ïà Ó¦ µÄURL´ò ¿ª Êä Èë Á÷¡£ Àý È磬 ÏÂ Ãæ µÄ ³Ì Ðò Àï °ü À¨ Ò» ¸ö Êý ¾Ý ÎÄ ¼þ£º InputStream is; byte buffer[] = new byte[24]; is = new URL(getDocumentBase(),dataname).openStream();

ÏÖ ÔÚ ÎÒ ÃÇ ¿É ÒÔ Ê¹ ÓÃis£¬ ¾Í Ïó ʹ ÓÃFileInputStream¶Ô Ïó Ò» Ñù£º is.read(buffer.0,buffer.length);

×¢ Ò⣺ ÓРЩ Óà »§ Éè Öà ÁË Ëû ÃÇ µÄ ä¯ ÀÀ Æ÷ °² È« Êô ÐÔ£¬ ¿É ÒÔ ²» Èà Äã µÄ ³Ì Ðò ·Ã ÎÊ Ëû ÃÇ µÄ ÎÄ ¼þ¡£

9.9 OutputStreams

ÉÏ Ãæ ÎÒ ÃÇ Ì¸ µ½ ÁË ¶Á Êý ¾Ý£¬ ÄÇ Ã´ Èç ºÎ Êµ ÏÖ Ð´ Êý ¾Ý ÄØ£¿ Ïó Êä Èë Á÷ Ò» Ñù£¬ Êä ³ö Á÷ Ò² ÓÐ Àà ËÆ µÄ ²ã ´Î ½á ¹¹£º

OutputStream

FileOutputStream PipedOutputStream ByteArrayOutputStream FilterOutputStream

DataOutputStream PrintStream BufferedOutputStream

ÎÒ ÃÇ ½« ·Ö ÎöFileOutputStreamºÍDataOutputStreamÀà À´ Íê ³É ÎÒ ÃÇ Åö µ½ µÄ Êä ³ö Á÷ ÎÊ Ìâ¡£ Æä Ëü µÄ Êä ³ö Á÷ °ü º¬ ÁË ¸ü ¶à µÄ ЊϢ ºÍ ³É Ô± º¯ Êý¡£ Ïó Êä Èë Á÷ µÄ Ô´ ÎÄ ¼þ Ò» Ñù£¬ Õâ Щ ÎÄ ¼þ ÔÚ $JAVA_HOME/src/java/ioÄ¿ ¼ Ï¡£

9.9.1 FileOutputStreamÀà

FileOutputStream¶Ô Ïó Óà ÓÚ Ïò Ò» ¸ö ÎÄ ±¾ ÎÄ ¼þ д Êý ¾Ý¡£ Ïó Êä Èë ÎÄ ¼þ Ò» Ñù£¬ Ä㠵à ÏÈ ´ò ¿ª Õâ ¸ö ÎÄ ¼þ ºó ²Å ÄÜ Ð´ Õâ ¸ö ÎÄ ¼þ¡£

9.9.2 ´ò ¿ª Ò» ¸öFileOutputStream¶Ô Ïó

Òª ´ò ¿ª Ò» ¸öFileOutputStream¶Ô Ïó£¬ Ïó ´ò ¿ª Ò» ¸ö Êä Èë Á÷ Ò» Ñù£¬ Äã ¿É ÒÔ ½« ×Ö ·û ´® »ò ÎÄ ¼þ ¶Ô Ïó ×÷ Ϊ ²Î Êý£º FileOutputStream myFileStream; myFileStream = new FileOutputStream("/etc/motd");

Ïó Êä Èë Á÷ Ò» Ñù£¬ Äã Ò² ¿É Õâ Ñù ʹ Ó㺠File myFile; FileOutputStream myFileStream; myFile = new File("/etc/motd"); myFileStream = new FileOutputStream(myFile);

9.9.3 д Èë Ò» ¸ö Á÷

Ò» µ© ÎÄ ¼þ ±» ´ò ¿ª£¬ Äã ±ã ¿É ÒÔ Ê¹ ÓÃwrite()º¯ Êý Ïò ÎÄ ¼þ Àï д Ò» Щ Êý ¾Ý¡£ ¾Í Ïó Êä Èë Á÷ µÄread()º¯ Êý Ò» Ñù£¬ Äã ¿É ÓÐ Èý ÖÖ ·½ ·¨£º l void write(int b);//writes out one byte l void write(byte b[]);//writes out entire array l void write (byte b[],int offset,int length);//write out length bytes of b[],starting at b[offset]

9.9.4 ¹Ø ±Õ Ò» ¸öFileOutputStream¶Ô Ïó

¹Ø ±Õ Êä ³ö Á÷ ºÍ ¹Ø ±Õ Êä Èë Á÷ ·½ ·¨ Ò» Ñù£¬ Äã ¿É ÒÔ Ê¹ Óà ÏÔ Ê½ ·½ ·¨£º myFileStream.close(); Äã Ò² ¿É ÒÔ Èà ϵ ͳ ×Ô ¶¯ ¹Ø ±Õ Ëü¡£

9.10 Àý ×Ó£º ´æ ´¢ ЊϢ

ÏÂ Ãæ ÓÐ Ò» ¸ö ³Ì Ðò£¬ Èà Óà »§ Êä Èë Ò» Щ ÐÕ Ãû ºÍ µç »° ºÅ Âë¡£ ÿ Ò» ¸ö ÐÕ Ãû ºÍ ºÅ Âë ½« ¼Ó ÔÚ ÎÄ ¼þ Àï¡£ Óà »§ ͨ ¹ý µã¡°Done"°´ Å¥ À´ ¸æ Ëß Ïµ ͳ Õû ¸ö ÁÐ ±í ÒÑ Êä Èë Íê ±Ï¡£

Ò» µ© Óà »§ Êä Èë Íê Õû ¸ö ÁÐ ±í£¬ ³Ì Ðò ½« ´´ ½¨ Ò» ¸ö Êä ³ö ÎÄ ¼þ ²¢ ÏÔ Ê¾ »ò ´ò Ó¡ ³ö À´¡£ Àý È磺

555-1212,Tom 123-456-7890,Peggy L. 234-5678,Marc 234-5678,Ron 876-4321,Beth&Brian 33.1.42.45.70,Jean-Marc

ÏÂ Ãæ ÊÇ ³Ì Ðò µÄ Ô´ ´ú Â룺 import java.io.*;

//Phones.java //A simple database creation program

class Phones { static FileOutputStream fos; public static final int lineLength = 81; public static void main(String args[]) throws IOExciption { byte[] phone = new byte[lineLength]; byte[] name = new byte[lineLenght]; int I; fos = new FileOutputStream("phone.numbers"); while (true) { System.err.println("Enter a name (enter 'done' to quit)"); readLine(name); if ("done".equalsIgnoreCase(new String(name,0,0,4))) { break; } System.err.println("Enter the phone number"); readLine(phone); for ( i=0;phone[i]!= 0;i++) { fos.write(phone[i]); } fos.write(','); for (i=0;name[i]!= 0;I++) { fos.write(name[i]); } fos.write('\n'); } fos.close(); }

private static void readLine(byte line[]) throws IOException { int i=0,b=0;

while ((i<lineLengh-1))&&((b=System.ini.read())!='\n')) { line[i++] = (byte)b; } line[i]=(byte) 0; } }

9.11 BufferedOutputÁ÷

Èç ¹û Äã ´¦ Àí µÄ Êý ¾Ý Á¿ ºÜ ¶à£¬ »ò Ïò ÎÄ ¼þ д ºÜ ¶à ´Î С Êý ¾Ý£¬ Äã ¿É ÒÔ Ê¹ Óà һ ¸öBufferedOutputÁ÷¡£ BufferedOutputÁ÷ Ìá ¹© ºÍFileOutputStreamÀà ͬ Ñù µÄ д ²Ù ×÷ ·½ ·¨£¬ µ« Ëù ÓÐ Êä ³ö È« ²¿ ´æ ·Å ÔÚ Ò» ¸ö »º ³å Çø Àï¡£ µ± Äã Ìî Âú »º ³å Çø£¬ Ëü ½« Ò» ´Î ÐÔ Ð´ Èë ´Å ÅÌ¡£ »ò Õß Äã Ö÷ ¶¯ ½« »º ³å Çø д Èë ´Å ÅÌ¡£

9.11.1 ´´ ½¨BufferedOutputÁ÷

Èç ¹û Òª ´´ ½¨ Ò» ¸öBufferedOutputÁ÷£¬ Ê× ÏÈ Ðè Òª Ò» ¸öFileOutputÁ÷¡£ È» ºó ½« »º ³å Çø Á´ ½Ó µ½ FileOutputÁ÷£º FileOutputStream myFileStream; BufferedOutputStream myBufferStream; //get a file handle myFileStream = new FileOutputStream("/usr/db/stock.dbf"); //chain a buffered output stream myBufferSSstream = new BufferedOutputStream(myFileStream);

9.11.2 ¸ü РºÍ ¹Ø ±ÕBufferedOutputÁ÷

ºÍ ÆÕ ͨFileOutputÁ÷ Ò» Ñù£¬ ÏòBufferedOutputÁ÷ Àï µÄ Ã¿ Ò» ´Î д ²Ù ×÷ ºÍ д Èë ´Å ÅÌ ²Ù ×÷ ²¢ ²» ÊÇ Ò» Ò» ¶Ô Ó¦ µÄ¡£ Òª Ïë ÔÚ ³Ì Ðò ½á Êø Ö® ǰ ½« »º ³å Çø Àï µÄ Êý ¾Ý д Èë ´Å ÅÌ£¬ ³ý ·Ç Ìî Âú »º ³å Çø£¬ ·ñ Ôò Ö» ÓÐ ÏÔ Ê½ µ÷ ÓÃflush()º¯ Êý£º //force left-over data to disk myBufferStream.flush(); //close the data file explicitly //Always close the "topmost" file stream myBufferStream.close(); myFileStream.close();

9.12 DataOutputÁ÷

ºÍDataInputStream¶Ô Ó¦£¬Java»¹ Ìá ¹© ÁËDataOutputÁ÷¡£ ʹ ÓÃDataOutputÁ÷£¬ ÎÒ ÃÇ ¿É ÒÔ Ïò ÎÄ ¼þ д Èë ¶þ ½ø ÖÆ Êý ¾Ý¡£

9.12.1 ´ò ¿ª ºÍ ¹Ø ±ÕDataOutputÁ÷ ¶Ô Ïó

´ò ¿ª ºÍ ¹Ø ±ÕDataOutputÁ÷ ¶Ô Ïó Óë ´ò ¿ª¡¢ ¹Ø ±ÕFileOutputÁ÷ ¶Ô Ïó ·½ ·¨ Ò» Ñù£º DataOutputStream myDataStream; FileOutputStream myFileStream; BufferedOutputStream myBufferStream;

//get a file handle mhyFileStream = new FileOutputStream("/usr/db/stock.dbf"); //chain a buffered output stream (for efficiency); myBufferStream = new BufferedOutputStream(myFileStream); //chain a data output file myDataStream = new DataOutputStream(myBufferStream);

//Now we can use both input streams to access our file //(iiIf we want to ...) myBufferStream.write(b); myDataStream.writeInt(i);

//close the data file explicitly //Always colse the "topmost" file stream myDataStream.close(); myBuffersStream.close(); myFileStream.close();

9.12.2 ÏòDataOutputÁ÷ д Êý ¾Ý

FileOutputÁ÷ Àï µÄwrite()º¯ Êý ¸÷ ÖÖ ·½ ·¨ ¶¼ ÊÊ Óà ÓÚDataOutputÁ÷¡£ Äã »¹ ¿É ÒÔ ¿´ µ½DataInputÁ÷ µÄ Àà ËÆ º¯ Êý ·½ ·¨£º l void writeBoolean (boolean v) l void writeByte (int v) l void writeShort (int v) l void writeChar (int v) l void writeInt (int v) l void writeFloat (float v) l void writeDouble (double v) l void writeBytes (string s) l void writeChars (string s)

¶Ô ×Ö ·û ´® À´ ˵£¬ ÓÐ Á½ ÖÖ Ñ¡ Ôñ£ºbyteºÍchar¡£ ¼Ç סbyteÊÇ8λ Êý ¾Ý ¶øcharÊÇ16λ Êý ¾Ý¡£ Èç ¹û Äã Ïë Àû ÓÃUnicode×Ö ·û µÄ ÓÅ µã£¬ Äã Ó¦ ʹ ÓÃwriteChars()º¯ Êý¡£

9.12.3 Êä ³ö ¼Ç Êý

ÔÚ Ê¹ Óà ¶þ ½ø ÖÆ Êý ¾Ý Êä ³ö ʱ ³£ Óà µÄ Áí Íâ Ò» ¸ö º¯ Êý ÊÇsize()¡£ Õâ ¸ö º¯ Êý ·µ »Ø д Èë ÎÄ ¼þ Êý ¾Ý µÄ ×Ü ×Ö ½Ú Êý¡£ Äã Ò² ¿É ÓÃsize()º¯ Êý ½« Êý ¾Ý ÎÄ ¼þ ·Ö ³É ËÄ ×Ö ½Ú Ϊ µ¥ λ µÄ ¿é£¬ Àý È磺 ... int bytesLeft = myDataStream.size()%4; for (int I = 0; I< bytesLeft; I++) { myDataStrea.write(0); } ...

9.13 Ëæ »ú ·Ã ÎÊ ÎÄ ¼þ

ÎÒ ÃÇ ¶Á ÎÄ ¼þ ³£ ³£ ²» ÊÇ ´Ó Í· ÖÁ β ˳ Ðò ¶Á µÄ¡£ Äã Ò² Ðí Ïë ½« Ò» ÎÄ ±¾ ÎÄ ¼þ µ± ×÷ Ò» ¸ö Êý ¾Ý ¿â£¬ ¶Á Íê Ò» ¸ö ¼Ç ¼ ºó£¬ Ìø µ½ Áí Ò» ¸ö ¼Ç ¼£¬ Ëü ÃÇ ÔÚ ÎÄ ¼þ µÄ ²» ͬ µØ ·½¡£JavaÌá ¹© ÁËRandomAccessFileÀà Èà Äã ²Ù ×÷ Õâ ÖÖ Àà ÐÍ µÄ Êä Èë Êä ³ö¡£

9.13.1 ´´ ½¨ Ëæ »ú ·Ã ÎÊ ÎÄ ¼þ

´ò ¿ª Ëæ »ú ·Ã ÎÊ ÎÄ ¼þ ÓÐ Á½ ÖÖ ·½ ·¨£º l Óà ÎÄ ¼þ Ãû myRAFile = new RandomAccessFile(String name,String mode); l Óà ÎÄ ¼þ ¶Ô Ïó myRAFile = new RandomAccessFile(File file,String mode);

mode²Î Êý ¾ö ¶¨ ÁË ·Ã ÎÊ ÎÄ ¼þ µÄ Ȩ ÏÞ£¬ Èç Ö» ¶Á'r'»ò ¶Á д'wr'µÈ¡£

Àý È磬 ÎÒ ÃÇ ´ò ¿ª Ò» ¸ö Êý ¾Ý ¿â ¸ü РÊý ¾Ý£º RandomAccessFile myRAFile; myRAFile = new RandomAccessFile("/usr/db/stock.dbf","rw");

9.13.2 ·Ã ÎÊ ÐŠϢ

RandomAccessFile¶Ô Ïó µÄ ¶Á д ²Ù ×÷ ºÍDataInput/DataOutput¶Ô Ïó µÄ ²Ù ×÷ ·½ ʽ Ò» Ñù¡£ Äã ¿É ÒÔ Ê¹ Óà ÔÚDataInputStream ºÍDataOutputStreamÀï ³ö ÏÖ µÄ Ëù ÓÐread()ºÍwrite()º¯ Êý¡£

»¹ ÓÐ ¼¸ ¸ö º¯ Êý °ï Öú Äã ÔÚ ÎÄ ¼þ Àï ÒÆ ¶¯ Ö¸ Õ룺 l long getFilePointer(); ·µ »Ø µ± ǰ Ö¸ Õë l void seek(long pos); ½« ÎÄ ¼þ Ö¸ Õë ¶¨ λ µ½ Ò» ¸ö ¾ø ¶Ô µØ Ö·¡£ µØ Ö· ÊÇ Ïà ¶Ô ÓÚ ÎÄ ¼þ Í· µÄ Æ« ÒÆ Á¿¡£ µØ Ö·0±í ʾ ÎÄ ¼þ µÄ ¿ª Í·¡£ l long length(); ·µ »Ø ÎÄ ¼þ µÄ ³¤ ¶È¡£ µØ Ö·"length()"±í ʾ ÎÄ ¼þ µÄ ½á β¡£

9.13.3 Ôö ¼Ó ЊϢ

Äã ¿É ÒÔ Ê¹ ÓÃ Ëæ »ú ·Ã ÎÊ ÎÄ ¼þ À´ Éè Öà ³É Ôö ¼Ó ЊϢ Ä£ ʽ£º myRAFile = new RandomAccessFile("/tmp/java.log","rw"); myRAFile.seek(myRAFile.length()); //Any subsequent write()s will be appended to the file

9.13.4 ×· ¼Ó ЊϢ Àý ×Ó ÏÂ Ãæ ÊÇ Ò» ¸ö ÔÚ ÒÑ ´æ ÔÚ ÎÄ ¼þ ºó Ãæ ×· ¼Ó ×Ö ·û ´® µÄ Àý ×Ó£º import java.io.IOException; import java.io.RandomAccessFile;

class raTest { public static void main(String args[]) throws IOException { RandomAccessFile myFAFile; String s = "Information to Append\nHi mom!\n"; //open our random access file myRAFile = new RandomAccessFile("/tmp/java.log","rw"); //move to the end of the file myRAFile.seek(myRAFile.length()); //Start appending! myRAFile.writeBytes(s);

myRAFile.close(); } }

±¾ Õ С ½á

1. Javaͨ ¹ý ϵ ͳ Àà ´ï µ½ ·Ã ÎÊ ±ê ×¼ Êä Èë Êä ³ö µÄ ¹¦ ÄÜ¡£ 2. Äã ¿É ÒÔ ´´ ½¨¡¢ ¶Á¡¢ д ÎÄ ¼þ¡£