![章輸入輸出流操作_第1頁](http://file4.renrendoc.com/view2/M01/17/30/wKhkFmYc9ceANXA0AADnegeL9Aw004.jpg)
![章輸入輸出流操作_第2頁](http://file4.renrendoc.com/view2/M01/17/30/wKhkFmYc9ceANXA0AADnegeL9Aw0042.jpg)
![章輸入輸出流操作_第3頁](http://file4.renrendoc.com/view2/M01/17/30/wKhkFmYc9ceANXA0AADnegeL9Aw0043.jpg)
![章輸入輸出流操作_第4頁](http://file4.renrendoc.com/view2/M01/17/30/wKhkFmYc9ceANXA0AADnegeL9Aw0044.jpg)
![章輸入輸出流操作_第5頁](http://file4.renrendoc.com/view2/M01/17/30/wKhkFmYc9ceANXA0AADnegeL9Aw0045.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
|海有|壁無|抬起頭做人,埋下頭做事。|納容|立欲|豈能事事如意,但求無愧于心。|百乃|千則|人不可有傲氣,但不可無傲骨。|川大|仞剛|把微笑留給世界,讓世界因你微笑!第9章輸入/輸出流和文件操作9.1文件和流的概念9.2字節(jié)輸入/輸出流類9.3字符輸入/輸出流類9.4文件操作類9.5管道流及其應(yīng)用9.1文件和流的概念9.1.1操作系統(tǒng)中的文件和目錄概念9.1.2程序設(shè)計語言中的文件類型9.1.3流的概念9.1.4Java的輸入/輸出流與文件操作概述9.1.1操作系統(tǒng)中的文件和目錄概念文件與文件系統(tǒng)目錄結(jié)構(gòu)與文件檢索文件的邏輯結(jié)構(gòu)流式文件記錄式文件文件的存取方法順序存取隨機存取文件的使用操作接口程序接口9.1.2程序設(shè)計語言中的文件類型文件類型概念文件與數(shù)組的區(qū)別數(shù)組是由固定多個元素組成,而文件的長度是不確定的、任意的。數(shù)組元素總是存放在內(nèi)存,而文件則往往與外部介質(zhì)相聯(lián)系。以“數(shù)組變量[下標]”的形式可以訪問數(shù)組中的任意一個元素,而文件不能通過下標形式訪問,需要通過文件對象調(diào)用相應(yīng)方法來訪問。9.1.3流的概念流的定義和作用流的定義、方向性和讀/寫操作流采用緩沖區(qū)技術(shù)流的作用流的存在9.1.4Java的輸入/輸出流與文件操作概述文件是用來存儲計算機數(shù)據(jù)的,是計算機軟件的重要組成部分。文件可以存放在多種介質(zhì)中,例如硬盤、軟盤和光盤,而且還可以通過網(wǎng)絡(luò)傳輸。內(nèi)存也可以存儲計算機數(shù)據(jù),但與存儲在硬盤上的文件數(shù)據(jù)相比,存儲在內(nèi)存中的數(shù)據(jù)在計算機關(guān)機或掉電時一般就會消失。因此,文件是使在計算機上的工作得以延續(xù)的一種重要媒介。另外,計算機程序在執(zhí)行時,要求被處理的數(shù)據(jù)必須先加載到內(nèi)存中。因此,一方面需要將位于內(nèi)存中的數(shù)據(jù)保存到文件中,以便長期使用;另一方面又需要將在文件中的數(shù)據(jù)加載到內(nèi)存中,以便計算機處理。在文件中的數(shù)據(jù)只是一連串的字節(jié)或字符,并沒有明顯的結(jié)構(gòu)。文件數(shù)據(jù)的內(nèi)部結(jié)構(gòu)需要由程序自己定義與處理。因此,Java語言將文件看作字節(jié)或字符序列的集合。組成文件的字節(jié)序列或字符序列分別被稱為字節(jié)流或字符源。Java語言提供了非常豐富的類來處理目錄、文件及文件數(shù)據(jù)。這些類主要位于包"java.io"中。另外,還有個別一些類位于其他包中,例如:"Java.uIti.ZIp"包的類主要對壓縮文件進行處理。流
在計算機系統(tǒng)的實際應(yīng)用中,常常需要處理許多資源。這些資源有的是以文件形式保存在磁盤中,有的通過網(wǎng)絡(luò)進行連接。這樣在應(yīng)用程序的實現(xiàn)中,必須在程序中提供一種將數(shù)據(jù)源連接到應(yīng)用程序的方法。這樣的方式稱為流(stream)。按照數(shù)據(jù)傳輸?shù)姆较?,將流分為輸入流和輸出流?.流類輸入/輸出處理是程序設(shè)計中非常重要的一部分,比如從鍵盤讀取數(shù)據(jù)、從文件中讀取數(shù)據(jù)或向文件中寫數(shù)據(jù)等等。輸入流(inputstream):是將數(shù)據(jù)從文件、標準輸入(類:java.io.BufferedInputStream,參數(shù):System.in)(主要用來接收鍵盤的輸Scanner)或其他外部輸入設(shè)備中加載到內(nèi)存。輸出流(outputstream):將在內(nèi)存中的數(shù)據(jù)保存到文件中,或者傳輸給輸出設(shè)備。Java把這些不同類型的輸入、輸出源抽象為流(stream),用統(tǒng)一接口來表示,從而使程序簡單明了。Jdk提供了包java.io,其中包括一系列的抽象類來實現(xiàn)輸入/輸出處理。輸入流在Java語言中對應(yīng)的抽象類java.io.InputStream以及其子類,輸出流對應(yīng)抽象類java.io.OutputStream以及子類。字節(jié)流和字符流:按照流中元素的基本類型,流分為字節(jié)流和字符流。字節(jié)流是由字節(jié)組成的;字符流是由字符組成的。Java里字符由兩個字節(jié)組成.1字符=2字節(jié)字節(jié)流與字符流主要的區(qū)別是他們的的處理方式
字節(jié)流是最基本的,所有的InputStrem和OutputStream的子類都是,主要用在處理二進制數(shù)據(jù),它是按字節(jié)來處理的但實際中很多的數(shù)據(jù)是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉(zhuǎn)化。2.文件操作類
Java支持對文件的順序存取和隨機存取操作,提供File類記載文件屬性信息,對文件的讀/寫操作通過流實現(xiàn);RandomAccessFile類以隨機存取方式進行文件讀/寫操作。File 文件類RandomAccessFile 隨機存取文件類9.2字節(jié)輸入/輸出流類9.2.1字節(jié)輸入流類InputStream9.2.2字節(jié)輸出流OutputStream類9.2.3Java的標準輸入/輸出9.2.4文件字節(jié)輸入/輸出流類9.2.5數(shù)據(jù)字節(jié)輸入/輸出流類9.2.6對象輸入/輸出流類字節(jié)流:從InputStream和OutputStream派生出來的一系列類。這類流以字節(jié)(byte)為基本處理單位。InputStream、OutputStreamFileInputStream、FileOutputStreamPipedInputStream、PipedOutputStreamByteArrayInputStream、ByteArrayOutputStreamFilterInputStream、FilterOutputStreamDataInputStream、DataOutputStreamBufferedInputStream、BufferedOutputStream字符流:從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。Reader、WriterInputStreamReader、OutputStreamWriterFileReader、FileWriterCharArrayReader、CharArrayWriterPipedReader、PipedWriterFilterReader、FilterWriterBufferedReader、BufferedWriterStringReader、StringWriter用幾個常用類型的數(shù)據(jù)來比較字節(jié)流和字符流的區(qū)別:
inta=5;
booleanb=true;
charc='G';
Stringd="你好";使用字符流打印以上類型的數(shù)據(jù)到文件中:PrintWriterdos=newPrintWriter(newBufferedWriter(newFileWriter("c:\\buffertest.txt")));
dos.print(a);
dos.print(b);
dos.print(c);
dos.print(d);
結(jié)果如下:a是5b是truec是Gd是你好字符流完全保證了和我們輸入的字符保持一致字節(jié)流DataOutputStreamdos=newDataOutputStream(newFileOutputStream("c:\\streamtest.txt"));
dos.writeInt(a);
dos.writeBoolean(b);
dos.writeChar(c);
dos.writeUTF(d);
dos.writeChars(d);
dos.writeBytes(d);結(jié)果是二進制文件,我們用十六進制編輯器打開它a是00000005,int是四個字節(jié)b是01,布爾型變量是一個字節(jié)c是0047,char是兩個字節(jié)d分別用3個不同的函數(shù)打印在文件中第一個是0006E4BDA0E5A5BD,前面的0006是writeUTF加上去的,是字節(jié)的數(shù)目,后面六個字節(jié)是"你好"的UTF編碼,每個漢字3個字節(jié)第二個是4F60597D,這是"你好"的bigendian的Unicode編碼,每個漢字2個字節(jié)第三個是607D,這是從4F60597D中分別取得兩個漢字的低字節(jié)9.2.1字節(jié)輸入流類InputStream1.InputStream類publicabstractclassInputStreamextendsObjectimplementsCloseable{publicabstractintread()throwsIOException; //返回讀取的一個字節(jié),抽象方法
publicintread(byte[]b)throwsIOException //從輸入流中讀取若干字節(jié)到指定緩沖區(qū),返回實際讀取的字節(jié)數(shù)
publicvoidclose()throwsIOException{} //關(guān)閉輸入流,空方法}intread();//讀取一個字節(jié),返回值為所讀的字節(jié)intread(byteb[]);//讀取多個字節(jié),放置到字節(jié)數(shù)組b中,通常
//讀取的字節(jié)數(shù)量為b的長度,返回值為實際讀取的字節(jié)的數(shù)量intread(byteb[],intoff,intlen);//讀取len個字節(jié),放置
//到以下標off開始字節(jié)數(shù)組b中,返回值為實際讀取的字節(jié)的數(shù)量intavailable();//返回值為流中尚未讀取的字節(jié)的數(shù)量longskip(longn);//讀指針跳過n個字節(jié)不讀,返回值為實際跳過的字節(jié)數(shù)量close();//流操作完畢后必須關(guān)閉voidmark(intreadlimit);//記錄當(dāng)前讀指針所在位置,readlimit//表示讀指針讀出readlimit個字節(jié)后//所標記的指針位置才失效voidreset();//把讀指針重新指向用mark方法所記錄的位置booleanmarkSupported();//當(dāng)前的流是否支持讀指針的記錄功能有關(guān)每個方法的使用,詳見JavaAPI。2.InputStream類的子類9.2.2字節(jié)輸出流OutputStream類1.OuputStream類publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable{publicabstractvoidwrite(intb)throwsIOException; //寫入一個字節(jié),抽象方法
publicvoidwrite(byte[]b)throwsIOException //將緩沖區(qū)中的若干字節(jié)寫入輸出流
publicvoidflush()throwsIOException{} //立即傳輸
publicvoidclose()throwsIOException{} //關(guān)閉輸出流,空方法}輸出數(shù)據(jù):
voidwrite(intb);
//往流中寫一個字節(jié)b
voidwrite(byteb[]);//往流中寫一個字節(jié)數(shù)組b
voidwrite(byteb[],intoff,intlen);//把字節(jié)數(shù)組b中從
flush()
//刷空輸出流,并輸出所有被緩存的字節(jié)由于某些流支持緩存功能,
//方法將把緩存中所有內(nèi)容強制輸出到流中。關(guān)閉流:
close();
//流操作完畢后必須關(guān)閉程序:使用OutPutStream來處理輸出流。importjava.io.IOException;importjava.io.OutputStream;publicclassJava_Write{publicstaticvoidmy_write(OutputStreamout){Strings="輸出流例子";byte[]b=s.getBytes();try{out.write(b);out.flush();}catch(IOExceptione){System.err.println("發(fā)生異常:"+e);e.printStackTrace();}}publicstaticvoidmain(Stringargs[]){my_write(System.out);}}2.OutputStream類的子類9.2.3Java的標準輸入/輸出在計算機系統(tǒng)中,標準輸入是從鍵盤等外部輸入設(shè)備中獲得數(shù)據(jù),標準輸出是向顯示器或打印機等外部輸出設(shè)備發(fā)送數(shù)據(jù)。1.標準輸入/輸出常量publicfinalclassSystemextendsObject{publicfinalstaticInputStreamin//標準輸入常量
publicfinalstaticPrintStreamout//標準輸出常量
publicfinalstaticPrintStreamerr //標準錯誤輸出常量}2.PrintStream類publicclassPrintStreamextendsFilterOutputStream{publicvoidprint(booleanb)publicvoidprint(charc)publicvoidprint(longl)publicvoidprint(inti)publicvoidprint(floatf)publicvoidprint(doubled)publicvoidprint(Strings)publicvoidprint(Objectobj)publicvoidprintln()}【例9.1】標準輸入/輸出。圖9.5標準輸入過程
圖9.6標準輸出過程9.2.4文件字節(jié)輸入/輸出流類1.FileInputSream類publicclassFileInputStreamextendsInputStream{publicFileInputStream(Stringname)throws FileNotFoundExceptionpublicFileInputStream(Filefile)throws FileNotFoundException}類FileInputStream和FileOutputStream用來進行文件I/O處理,由它們所提供的方法可以打開本地主機上的文件,并進行順序的讀/寫。程序:FileInputStream的應(yīng)用。importjava.io.FileInputStream;importjava.io.IOException;publicclassJava_EchoFile{publicstaticvoidmain(Stringargs[]){try{FileInputStreamf=newFileInputStream("test.txt");inti;intb=f.read();for(i=0;b!=-1;i++){System.out.print((char)b);b=f.read();}
System.out.println();System.out.println("文件\"test.txt\"字節(jié)數(shù)為"+i);f.close();}catch(IOExceptione){System.err.println("發(fā)生異常:"+e);e.printStackTrace();}}}2.FileOutputStreamFileOutputStream類:publicclassFileOutputStreamextendsOutputStream{publicFileOutputStream(Stringname) throwsFileNotFoundExceptionpublicFileOutputStream(Filefile)throws FileNotFoundExceptionpublicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException}程序:FileOutputStream類的使用。將字符串寫入到指定的文件中。例如,將字符串“為奧運加油!”寫入到文件“test.txt”中。importjava.io.IOException;importjava.io.FileOutputStream;publicclassJava_WriteFile{publicstaticvoidmain(Stringargs[]){Strings="為奧運加油!";byte[]b=s.getBytes();try{FileOutputStreamf=newFileOutputStream("out.txt");f.write(b);f.flush();f.close();}catch(IOExceptione){System.err.println("發(fā)生異常:"+e);e.printStackTrace();}}}【例9.2】使用文件字節(jié)輸入/輸出流實現(xiàn)文件的輸入/輸出操作。文件輸入操作文件輸出操作文件復(fù)制操作9.2.5數(shù)據(jù)字節(jié)輸入/輸出流類數(shù)據(jù)字節(jié)輸入流DataInputStream類和數(shù)據(jù)字節(jié)輸出流DataOutputStream類提供直接讀或?qū)懟緮?shù)據(jù)類型數(shù)據(jù)的方法,在讀或?qū)懩撤N基本數(shù)據(jù)類型時,不必關(guān)心它的實際長度是多少字節(jié)。1.DataInputStream類publicclassDataInputStreamextendsFilterInputStreamimplementsDataInput{publicDataInputStream(InputStreamin)//構(gòu)造方法
publicfinalshortreadShort()throwsIOExceptionpublicfinalbytereadByte()throwsIOExceptionpublicfinalintreadInt()throwsIOException//讀取一個整型
publicfinallongreadLong()throwsIOExceptionpublicfinalfloatreadFloat()throwsIOExceptionpublicfinaldoublereadDouble()throwsIOExceptionpublicfinalcharreadChar()throwsIOException//讀取一個字符
publicfinalbooleanreadBoolean()throwsIOException}2.DataOutputStream類publicclassDataOutputStreamextendsFilterOutputStreamimplementsDataOutput{publicDataOutputStream(OutputStreamout)//構(gòu)造方法
publicfinalvoidwriteByte(intv)throwsIOExceptionpublicfinalvoidwriteShort(intv)throwsIOExceptionpublicfinalvoidwriteInt(intv)throwsIOException//寫入一個整型
publicfinalvoidwriteLong(longv)throwsIOExceptionpublicfinalvoidwriteFloat(floatv)throwsIOExceptionpublicfinalvoidwriteDouble(doublev)throwsIOExceptionpublicfinalvoidwriteChar(intv)throwsIOException//寫入一個字符
publicfinalvoidwriteBoolean(booleanv)throwsIOExceptionpublicfinalvoidwriteChars(Strings)throwsIOException //寫入一個字符串
publicfinalintsize()//返回實際寫入的字節(jié)數(shù)}【例9.3】將Fibonacci序列值寫入一個整數(shù)類型文件中。數(shù)據(jù)寫入文件的思路同標準輸出捕獲異??刂戚斎虢Y(jié)束9.2.6對象輸入/輸出流類1.ObjectInputStream類publicclassObjectInputStreamextendsInputStreamimplementsObjectInput,ObjectStreamConstants{publicObjectInputStream(InputStreamin) throwsIOException //構(gòu)造方法
publicfinalObjectreadObject()throws IOException,ClassNotFoundException //讀取一個對象}2.ObjectOutputStream類publicclassObjectOutputStreamextendsOutputStreamimplementsObjectOutput,ObjectStreamConstants{publicObjectOutputStream(OutputStream out)throwsIOException //構(gòu)造方法
publicfinalvoidwriteObject(Objectobj) throwsIOException//寫入一個對象}【例9.4】使用對象流將若干學(xué)生對象寫入以對象為基本類型的記錄式文件中。圖9.7各種輸入/輸出流及其讀/寫方法9.3字符輸入/輸出流類9.3.1字符輸入/輸出流抽象類Reader和Writer9.3.2文件字符輸入/輸出流類9.3.3字符緩沖流類采用字節(jié)流類可以對以字符為基本類型的流式文件進行數(shù)據(jù)讀/寫操作,方法如下:·采用文件字節(jié)流類,將字節(jié)緩沖區(qū)數(shù)組中的字節(jié)數(shù)據(jù)轉(zhuǎn)化為字符?!げ捎脭?shù)據(jù)字節(jié)流類,可以直接讀取一個字符,寫入一個字符或字符串。數(shù)據(jù)字節(jié)流類中的讀/寫方法聲明如下:publicclassDataInputStrearnextendsFilterInputStrearnimplementsDataInput{
publicfmalcharreadCharOthrowsIOException//讀取一個字符
publicclassDataOutputStreamextends}FilterOutputStreamimplementsDataOutput{publicfinalvoidwriteChar(intv)throwsIOException //寫入一個字符publicfinalvoidwriteChars(Strings)throwsIOException II寫入一個字符串}9.3.1字符輸入/輸出流抽象類Reader和Writerjava中提供了處理以16位的Unicode碼表示的字符流的類,即以Reader和Writer為基類派生出的一系列類。Reader和Writer,這兩個類是抽象類,只是提供了一系列用于字符流處理的接口,不能生成這兩個類的實例,只能通過使用由它們派生出來的子類對象來處理字符流。不能使用newReader()或newWriter()以字符為基本單位訪問文件的可以稱為讀/寫器。字節(jié)流類與字符流類(讀寫器)之間的對應(yīng)關(guān)系:P295P296字節(jié)流字符流(讀寫器)java.io.InputStreamjava.io.Readerjava.io.OutStreamjava.io.Writerjava.io.FileInputStreamjava.io.FileReaderjava.io.FileOutStreamjava.io.FileWriterjava.io.BufferedInputStreamjava.io.BufferedReaderjava.io.BufferedOutStreamjava.io.BufferedWriter(1)Reader類
抽象類java.io.Reader和抽象類java.io.Writer規(guī)定了字符流的基本操作。抽象類java.io.Reader用來讀出數(shù)據(jù),該類是處理所有字符流輸入類的父類。讀取字符標記流關(guān)閉流Reader類的聲明:publicabstractclassReaderextendsObjectimplementsReadable,Closeable{publicintread()throwsIOExceptionpublicintread(charcbuf[])throwsIOExceptionabstractpublicintread(charcbuf[],intoff,intlen) throwsIOException;abstractpublicvoidclose()throwsIOException;}讀取字符
publicintread()throwsIOException;/*從文件中讀取一個字符,返回值為讀取的字符,當(dāng)返回值為-1時,表示到達文件末尾。*/publicintread(charcbuf[])throwsIOException;/*讀取一系列字符到數(shù)組cbuf[]中,返回值為實際讀取的字符的數(shù)量,當(dāng)返回值為-1時,表示到達文件末尾。*/publicabstractintread(charcbuf[],intoff,intlen)throwsIOException;/*讀取len個字符,從數(shù)組cbuf[]的下標off處開始存放,返回值為實際讀取的字符數(shù)量,該方法必須由子類實現(xiàn),,當(dāng)返回值為-1時,表示到達文件末尾。*/標記流publicbooleanmarkSupported();//判斷當(dāng)前流是否支持做標記publicvoidmark(intreadAheadLimit)throwsIOException;//給當(dāng)前流作標記,最多支持readAheadLimit個字符的回溯。publicvoidreset()throwsIOException;//將當(dāng)前流重置到做標記處關(guān)閉流
publicabstractvoidclose()throwsIOException;該成員方法關(guān)閉當(dāng)前字符流并釋放與字符流相關(guān)的系統(tǒng)資源。(2)Writer類
抽象類java.io.Writer用來存儲數(shù)據(jù),其提供了多個成員方法,分別用來輸出單個字符、字符數(shù)組和字符串。該類是處理所有字符流輸出類的父類。向輸出流寫入字符flush()關(guān)閉流Writer類的聲明:publicabstractclassWriterimplementsAppendable,Closeable,Flushable{publicvoidwrite(intc)throwsIOExceptionpublicvoidwrite(char[]cbuf)throwsIOExceptionpublicvoidwrite(Stringstr)throwsIOException //將字符串寫入輸出流
publicWriterappend(CharSequencecsq)throwsIOExceptionpublicWriterappend(charc)throwsIOExceptionpublicabstractvoidflush()throwsIOException //將緩沖區(qū)內(nèi)容寫入輸出流
publicabstractvoidclose()throwsIOException}向輸出流寫入字符
publicvoidwrite(intc)throwsIOException;//將整型值c的低16位寫入當(dāng)前文件中。publicvoidwrite(charcbuf[])throwsIOException;//將字符數(shù)組cbuf[]寫入當(dāng)前文件中。publicabstractvoidwrite(charcbuf[],intoff,intlen)throwsIOException;//將字符數(shù)組cbuf[]中的從索引為off的位置處開始的len個字符寫入當(dāng)前文件中。publicvoidwrite(Stringstr)throwsIOException;//將字符串str中的字符寫入當(dāng)前文件中。publicvoidwrite(Stringstr,intoff,intlen)throwsIOException;//將字符串str中從索引off開始處的len個字符寫入當(dāng)前文件中。publicWriterappend(CharSequencecsq)throwsIOException//將字符序列csq添加到當(dāng)前文件中。
publicWriterappend(charc)throwsIOException//將字符c添加到當(dāng)前文件中。flush()
用來強制輸出,使得數(shù)據(jù)立即寫入文件中。刷空輸出流,并輸出所有被緩存的字節(jié)。2024/4/1566關(guān)閉流
publicabstractvoidclose()throwsIOException;該成員方法關(guān)閉當(dāng)前字符流并釋放與字符流相關(guān)的系統(tǒng)資源。9.3.2文件字符輸入/輸出流類類java.io.FileReader和java.io.FileWriter分別是抽象類java.io.Reader和java.io.Writer類的子類。java.io.FileReader兼容抽象類ava.io.Reader的所有成員方法,可以進行讀取字符串和關(guān)閉流等操作。類java.io.FileWriter兼容抽象類java.io.Writer的所有成員方法,可以進行輸出單個或多個字符、強制輸出和關(guān)閉流等操作。FileReader和java.io.FileWriter類與InputStreamReader和OutputStreamWriter類的區(qū)別?
類java.io.FileReader和java.io.FileWriter用于文本文件的輸入和輸出處理,與文件字符流InputStreamReader類和OutputStreamWriter類的功能相似,是其子類。
1.FileReaderFileReader類的聲明:publicclassFileReaderextendsInputStreamReader{publicFileReader(StringfileName)throwsFileNotFoundException//構(gòu)造方法,參數(shù)fileName指定文件名
publicFileReader(Filefile)throwsFileNotFoundException}2.FileWriter類類的聲明:publicclassFileWriterextendsOutputStreamWriter{publicFileWriter(StringfileName)throws IOException //構(gòu)造方法
publicFileWriter(StringfileName,booleanappend) throwsIOExceptionpublicFileWriter(Filefile)throwsIOExceptionpublicFileWriter(Filefile,booleanappend)throws IOException}程序:文件的讀寫程序。importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;publicclassJava_ReaderWriter{publicstaticvoidmain(Stringarg[]){try{FileWriterf_out=newFileWriter("test.txt");f_out.write("有志者,事竟成!");f_out.close();FileReaderf_in=newFileReader("test.txt");for(intc=f_in.read();c!=-1;c=f_in.read())System.out.print((char)c);f_in.close();}
catch(IOExceptione){System.out.println("發(fā)生異常:"+e);e.printStackTrace();}}}程序:將Fibonacci序列值寫入一個文本文件中。9.3.3字符緩沖流類
FileReader類和FileWriter類以字符為單位進行數(shù)據(jù)讀/寫操作,數(shù)據(jù)的傳輸效率很低。Java提供BufferedReader類、LineNumberReader類和BufferedWriter類以緩沖流方式進行數(shù)據(jù)讀寫操作。
生成流對象
publicBufferedReader(Readerin);//使用缺省的緩沖區(qū)大小
publicBufferedReader(Readerin,intsz);//sz為緩沖區(qū)的大小
publicBufferedWriter(Writerout);
publicBufferedWriter(Writerout,intsz);讀入/寫出字符除了Reader和Writer中提供的基本的讀寫方法外,增加對整行字符的處理。
publicStringreadLine()throwsIOException;//讀一行字符
publicvoidnewLine()throwsIOException;//寫一行字符1.BufferedReader類
BufferedReader類的聲明:publicclassBufferedReaderextendsReader{publicBufferedReader(Readerin)//構(gòu)造方法,使用缺省的緩沖區(qū)大小
publicBufferedReader(Readerin,intsz);//sz為緩沖區(qū)的大小
publicStringreadLine()throwsIOException //讀取一行字符串,輸入流結(jié)束時返回null}2.LineNumberReader類LineNumberReader類的聲明:publicclassLineNumberReaderextendsReader{publicLineNumberReader(Readerin)//構(gòu)造方法,使用缺省的緩沖區(qū)大小
publicLineNumberReader(Readerin,intsz);//sz為緩沖區(qū)的大小
publicStringgetLineNumber()throwsIOException//獲取行號}3.BufferedWriter類BufferedWriter類的聲明:publicclassBufferedWriterextendsWriter{publicBufferedWriter(Writerout)//構(gòu)造方法
publicBufferedWriter(Writerout,intsz) //sz指定字符緩沖區(qū)長度
publicvoidnewLine()throwsIOException//寫入一個換行符}程序:帶緩存和行號的讀寫程序。importjava.io.BufferedWriter;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.LineNumberReader;importjava.io.IOException;publicclassJava_BufferedReaderWriter{publicstaticvoidmain(Stringarg[]){try{BufferedWriterbw=newBufferedWriter(newFileWriter("test.txt"));bw.write("有志者,事竟成!");bw.newLine();bw.write("苦心人,天不負!");bw.newLine();bw.close();
LineNumberReaderbr=newLineNumberReader(newFileReader("test.txt"));Strings;for(s=br.readLine();s!=null;s=br.readLine())System.out.println(br.getLineNumber()+":"+s);br.close();}catch(IOExceptione){System.out.println("發(fā)生異常:"+e);e.printStackTrace();}}}【例9.5】將Fibonacci序列值寫入一個文本文件中。9.3.4InputStreamReader和OutputStreamWriter
java.io包中用于處理字符流的最基本的類,用來在字節(jié)流和字符流之間作為中介。生成流對象:publicInputStreamReader(InputStreamin);/*in是字節(jié)流,而InputStreamReader是字符流,但是其來源是字節(jié)流in,因此InputStreamReader就可以把字節(jié)流in轉(zhuǎn)換成字符流處理。*/publicInputStreamReader(InputStreamin,Stringenc)throwsUnsupportedEncodingException;/*enc是編碼方式,就是從字節(jié)流到字符流進行轉(zhuǎn)換時所采用的編碼方式,例如ISO8859-1,UTF-8,UTF-16等等*/publicOutputStreamWriter(OutputStreamout);/*out是字節(jié)流,而OutputStreamReader是字符流*/publicOutputStreamWriter(OutputStreamout,Stringenc)throwsUnsupportedEncodingException;//enc是編碼方式讀入和寫出字符基本同Reader和Writer。獲取當(dāng)前編碼方式
publicStringgetEncoding();關(guān)閉流
publicvoidclose()throwsIOException;9.4文件操作類9.4.1文件類File9.4.2文件過濾器接口9.4.3文件對話框組件9.4.4隨機存取文件類9.4.1文件類File1.文件或目錄的生成File類的構(gòu)造方法publicclassFileextendsObjectimplementsSerializable,Comparable<File>{publicFile(Stringpathname)publicFile(Stringparent,Stringchild)publicFile(Fileparent,Stringchild)}publicFile(Stringpath);/*如果path是實際存在的路徑,則該File對象/*表示的是目錄;如果path是文件名,則該File對象表示的是文件。*/publicFile(Stringpath,Stringname);//path是路徑名,name是文件名publicFile(Filedir,Stringname);//dir是路徑名,name是文件名例如,F(xiàn)ilefile=newFile("myfile.txt");Filedir=newFile(".",""); //創(chuàng)建一個目錄文件對象,表示當(dāng)前目錄Filedir=newFile("C:","");2.文件名的處理299
StringgetName();//得到一個文件的名稱(不包括路徑)
StringgetPath();
//得到一個文件的路徑名
StringgetAbsolutePath();//得到一個文件的絕對路徑名
StringgetParent();//得到一個文件的上一級目錄名
StringrenameTo(FilenewName);//將當(dāng)前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年廚電產(chǎn)品節(jié)日禮盒企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年復(fù)古游藝用品品牌行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年手表文化傳媒行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年塑木防潮地墊行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年咸味糕點店行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年基因表達譜分析芯片行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年地質(zhì)環(huán)境遙感監(jiān)測平臺行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年手腕振動放松器行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年呼吸順暢維生素D丸行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 出差長期租房合同范例
- 保障性住房建設(shè)資金來源與運作機制
- 金點子活動總結(jié)匯報
- 原料驗收標準知識培訓(xùn)課件
- 江蘇春節(jié)風(fēng)俗 南京夫子廟、鹽水鴨與昆曲
- Unit4MyfamilyStorytime(課件)人教新起點英語三年級下冊
- 物流運作管理-需求預(yù)測
- 《電機與電氣控制(第三版)習(xí)題冊》 習(xí)題答案
- 鋼桁梁頂推施工方案
- 醫(yī)療器械采購方案投標方案(完整技術(shù)標)
- 交通運輸安全工作調(diào)研報告
- 旅行社導(dǎo)游合同
評論
0/150
提交評論