輸入輸出流與文件操作課件_第1頁(yè)
輸入輸出流與文件操作課件_第2頁(yè)
輸入輸出流與文件操作課件_第3頁(yè)
輸入輸出流與文件操作課件_第4頁(yè)
輸入輸出流與文件操作課件_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第八章輸入輸出流與文件操作第八章輸入輸出流與文件操作目錄

輸入輸出流的分類目錄和文件管理文件的隨機(jī)訪問(wèn)其他常用的流字符流字節(jié)流目錄輸入輸出流的分類目錄和文件管理文件的隨機(jī)訪問(wèn)其他常輸入輸出流的分類

Java流的概念Java使用流(stream)來(lái)執(zhí)行輸入輸出(I/O)的功能,流是一種數(shù)據(jù)的源頭和目的之間的通信途徑。

標(biāo)準(zhǔn)輸入輸出Java系統(tǒng)事先定義好兩個(gè)流對(duì)象,分別與系統(tǒng)的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出相聯(lián)系,它們是System.in和System.outSystem是Java中一個(gè)功能很強(qiáng)大的類,利用它可以獲得很多Java運(yùn)行時(shí)的系統(tǒng)信息。

3132輸入輸出流的分類Java流的概念3132輸出流(程序?qū)懗鰯?shù)據(jù))

輸入流(程序讀入數(shù)據(jù))

Java中根據(jù)流操作的種類可分為:字節(jié)流和字符流。根據(jù)流的方向,流可分為兩類:輸入流和輸出流。Java流類體系結(jié)構(gòu)1

Java流類體系結(jié)構(gòu)2Java流類體系結(jié)構(gòu)3

Java流類體系結(jié)構(gòu)4

——Java流的概念輸入輸出流的分類輸出流(程序?qū)懗鰯?shù)據(jù))輸入流(程序讀入數(shù)據(jù))Java中根【例8.1】標(biāo)準(zhǔn)輸入輸出舉例?!獦?biāo)準(zhǔn)輸入輸出輸入輸出流的分類importjava.io.*;publicclassIODemo{publicstaticvoidmain(Stringargs[])throwsIOException{intb;intcount=0;while((b=System.in.read())!=-1){count++;System.out.print((char)b);}System.out.println();System.out.println("programend");}}運(yùn)行結(jié)果:輸入:a,b,c,d輸出:a,b,c,d輸入:^Z輸出:programend【例8.1】標(biāo)準(zhǔn)輸入輸出舉例?!獦?biāo)準(zhǔn)輸入輸出輸入輸出流目錄和文件管理

32文件名的處理31File類文件或目錄的生成文件屬性測(cè)試普通文件信息和工具目錄操作◆publicFile(Stringpath):如果path是實(shí)際存在的路徑,則該File對(duì)象表示的是目錄;如果path是文件名,則該File對(duì)象表示的是文件?!魀ublicFile(Stringpath,Stringname):path是路徑名,name是文件名(不可為空)?!魀ublicFile(Filedir,Stringname):dir是路徑名,name是文件名?!鬝tringgetName():得到一個(gè)文件的名稱(不包括路徑)?!鬝tringgetPath():得到一個(gè)文件的路徑名。◆StringgetAbsolutePath():得到一個(gè)文件的絕對(duì)路徑名?!鬝tringgetParent():得到一個(gè)文件的上一級(jí)目錄名?!鬝tringrenameTo(FilenewName):將當(dāng)前文件名更名為給定文件的完整路徑?!纠?.2】◆booleanexists():測(cè)試當(dāng)前File對(duì)象所指示的文件或目錄是否存在,若存在,返回True?!鬮oolean

createNewFile():創(chuàng)建當(dāng)前文件?!鬮ooleancanWrite():測(cè)試當(dāng)前文件是否可寫?!鬮ooleancanRead():測(cè)試當(dāng)前文件是否可讀?!鬮ooleanisFile():測(cè)試當(dāng)前文件是否是文件(不是目錄)。◆booleanisDirectory():測(cè)試當(dāng)前文件是否是目錄,若為目錄則返回True。【例8.3】◆longlastModified():得到文件最近一次修改的時(shí)間?!鬺onglength():得到文件的長(zhǎng)度,以字節(jié)為單位,若不存在,返回0?!鬮ooleandelete():刪除File對(duì)象代表的文件或目錄,目錄需為空。刪除成功,返回True?!鬮ooleanmkdir():生成一個(gè)由該對(duì)象指定的路徑(新目錄),若成功,返回True?!鬮ooleanmkdirs():生成一個(gè)新的目錄,包含子目錄。若成功,返回true?!鬮ooleanrenameTo(FilenewName):將當(dāng)前File對(duì)象所代表的路徑名改為newName所代表的路徑名。若成功,返回true?!鬝tringlist():列出當(dāng)前目錄下的文件。【例8.4】File類的應(yīng)用【例8.5】【例8.6】目錄和文件管理32文件名的處理31File類文件或目錄字節(jié)流

緩沖區(qū)流BufferedInputStream和BufferedOutputStream33順序讀/寫文件(FileInputStream與FileOutputStream)31ByteArrayInputStream和ByteArrayOutputStream32字節(jié)流緩沖區(qū)流BufferedInputStream和Bu順序讀/寫文件(FileInputStream與FileOutputStream)⑴FileInputStream類從磁盤文件讀取數(shù)據(jù)。常用的構(gòu)造方法有:◆FileInputStream(Stringname):打開文件name用來(lái)讀取數(shù)據(jù)。如:FileInputStreamf=newFileInputStream("c:/test.txt");◆FileInputStream(Filefile):打開文件file用來(lái)讀取數(shù)據(jù)。如:Filef=newFile("c:/test.txt");FileInputStreamf1=newFileinputStream(f);⑵FileOutputStream類創(chuàng)建文件(如果文件不存在),并將數(shù)據(jù)寫入文件。FileOutputStream類常用的構(gòu)造方法有:◆FileOutputStream(Stringname):打開文件name用來(lái)寫入數(shù)據(jù)。如:FileOutputStreamf=newFileOutputStream("c:/test.txt");◆FileOutputStream(Filefile):打開文件file用來(lái)寫入數(shù)據(jù)。如:Filef=newFile("c:/test.txt");FileOutputStreamf1=newFileOutputStream(f);◆FileOutputStream(Stringname,Booleanappend):打開文件name用來(lái)寫入數(shù)據(jù),若append為true,則寫入的數(shù)據(jù)會(huì)加到原有文件后面,否則,覆蓋原有的文件。如:FileOutputStreamf=newFileOutputStream("c:/test.txt",true);字節(jié)流

順序讀/寫文件(FileInputStream與FileOu字節(jié)流【例8.7】將FileIO.java復(fù)制為FileExam.java.bak。importjava.io.*;publicclassFileIO{publicstaticvoidmain(Stringargs[]){FileInputStreaminFile=null;FileOutputStreamoutFile=null;try{inFile=newFileInputStream("FileIO.java");outFile=newFileOutputStream("FileExam.java.bak");intdata;while((data=inFile.read())!=-1){outFile.write(data);}

}catch(FileNotFoundExceptione){System.out.println(e.getMessage());}catch(IOExceptione){System.out.println(e.getMessage());}finally{if(inFile!=null){try{inFile.close();}catch(IOExceptione){}}if(outFile!=null){try{outFile.close();}catch(IOExceptione){}}

}}}程序運(yùn)行結(jié)果【解題分析】以下問(wèn)題的求解過(guò)程可分解如下:①先打開文件FileExam.java②用read()將其內(nèi)容逐字節(jié)讀取出來(lái)(如果返回值為-1,則表明已到達(dá)文件尾端)③再用write()將讀出的字節(jié)逐一寫入另一個(gè)文件FileExam.java.bak中④若文件無(wú)法打開(例如FileExam.java不存在)或無(wú)法生成(FileExam.java.bak),則拋出FileNotFoundException異常,若讀寫出錯(cuò),則拋出IOException異常。⑤最后,在finally中關(guān)閉文件。字節(jié)流【例8.7】將FileIO.java復(fù)制為FileEx在使用FileInputStream類時(shí),若關(guān)聯(lián)的目錄或者文件不存在,Java會(huì)拋出一個(gè)IOException異常。程序可以使用try-catch塊檢測(cè)和處理捕捉到的異常。為了把一個(gè)文件輸入流對(duì)象與一個(gè)文件關(guān)聯(lián)起來(lái),可以使用下列的代碼段來(lái)處理Java產(chǎn)生的IOEception異常。

例如:try{FileInputStreamfis=newFileInputStream("java.txt");…}catch(IOExceptione){System.out.println("FileException:"+e);}注:字節(jié)流

在使用FileInputStreaByteArrayInputStream和ByteArrayOutputStream字節(jié)流

⑴ByteArrayInputStream將字節(jié)數(shù)組用作源,并在該數(shù)組中執(zhí)行讀操作。它有兩種構(gòu)造方法。第一種構(gòu)造方法將字節(jié)數(shù)組作為參數(shù)?!鬊yteArrayInputStream(byte[]buffer):生成一個(gè)字節(jié)數(shù)組的輸入流,并指定一個(gè)字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。如:ByteArrayInputStreamb=newByteArrayInputStream(buf[]);另外一種構(gòu)造方法是從指定的字節(jié)數(shù)組來(lái)創(chuàng)建?!鬊yteArrayinputStreamb=newByteArrayinputStream(buf[],off,len);其中off是要讀取的第一個(gè)字節(jié)的偏移,len是要讀取數(shù)組的字節(jié)數(shù);⑵ByteArrayOutputStream有2種構(gòu)造方法?!鬊yteArrayOutputStream():生成一個(gè)字節(jié)數(shù)組的輸出流,其緩沖區(qū)的默認(rèn)初始大小為32字節(jié),若有需要,緩沖區(qū)的大小會(huì)隨之增加。如:ByteArrayOutPutStreamb=newByteArrayOutputStream();◆ByteArrayOutputStream(intsize):創(chuàng)建32個(gè)字節(jié)的緩沖器用于儲(chǔ)存數(shù)據(jù),但分配size字節(jié)的初始大小給此緩沖區(qū)。如:ByteArrayOutputStreamb1=newByteArrayOutputStream(size);創(chuàng)建大小為size的緩沖器⑶ByteArrayOutputStream的一些常用方法:◆intsize():返回此流緩沖區(qū)的大小?!鬮yte[]toByteArray():生成一個(gè)新的字節(jié)數(shù)組,并將流的內(nèi)容復(fù)制到此字節(jié)數(shù)組?!鬝tringtoString():將流的內(nèi)容轉(zhuǎn)換為String對(duì)象。ByteArrayInputStream和ByteArray【例8.8】程序讀入文件ByteIO.java,將其內(nèi)容寫入內(nèi)存中(一個(gè)字節(jié)數(shù)組),接著轉(zhuǎn)換為String對(duì)象。字節(jié)流importjava.io.*;importjava.util.*;publicclassByteIO{publicstaticvoidmain(Stringargs[]){try{FileinFile=newFile(“ByteIO.java");FileInputStreaminData=newFileInputStream(inFile);ByteArrayOutputStreamdataArray=newByteArrayOutputStream();intdata;while((data=inData.read())!=-1){dataArray.write(data);}inData.close();StringdataStr=dataArray.toString();}catch(IOExceptione){System.out.println(e.getMessage());}}}【例8.8】程序讀入文件ByteIO.java,將其內(nèi)容寫入字節(jié)流

緩沖區(qū)流BufferedInputStream和BufferedOutputStream⑴BufferedInputStream類的構(gòu)造方法和方法:◆BufferedInputStream(InputStreamin):構(gòu)造一個(gè)BufferedInputStream。◆BufferedInputStream(InputStreamin,intsize):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedInputStream?!鬷ntavailable():得到可以從這個(gè)輸入流讀取的字節(jié)數(shù)?!魐oidclose():關(guān)閉流?!鬷ntread():讀取數(shù)據(jù)的字節(jié)?!鬷ntread(byte[]b,intoff,intlen):從這個(gè)字節(jié)輸入流的給定偏移量處開始讀取字節(jié),存儲(chǔ)到給定的字節(jié)數(shù)組?!魐oidreset():將緩沖區(qū)重新設(shè)置到加標(biāo)記的位置?!鬺ongskip(longn):跳過(guò)n個(gè)字節(jié)的數(shù)據(jù)。⑵BufferedOutputStream類的構(gòu)造方法和方法:◆BufferedOutputStream(OutputStreamout):構(gòu)造一個(gè)BufferedOutputStream。◆BufferedOutputStream(OutputStreamout,intsize):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedOutputStream?!魐oidflush():刷新這個(gè)流?!魐oidwrite(byte[]b,intoff,intlen):將給定的字節(jié)數(shù)組寫到這個(gè)緩沖輸出流?!魐oidwrite(intb):將給定的字節(jié)寫到這個(gè)緩沖輸出流。字節(jié)流緩沖區(qū)流BufferedInputStream和Bu【例8.9】文件拷貝的緩沖改進(jìn)。字節(jié)流importjava.io.*;publicclassCopy{publicstaticvoidmain(Stringargs[]){BufferedInputStreambis=null;BufferedOutputStreambos=null;bytebuf[]=newbyte[100];try{bis=newBufferedInputStream(newFileInputStream("test.txt"));bos=newBufferedOutputStream(newFileOutputStream("testcopy.txt"));intlen=0;while(true){len=bis.read(buf);if(len<=0)break;bos.write(buf,0,len);}bos.flush();//緩沖區(qū)只有滿時(shí)才會(huì)將數(shù)據(jù)輸出到輸出流,用flush()將未滿的緩沖區(qū)中數(shù)據(jù)強(qiáng)制輸出}catch(Exceptione){e.printStackTrace();}finally{if(bis!=null)try{bis.close();}catch(Exceptione){e.printStackTrace();}if(bos!=null)try{bos.close();}catch(Exceptione){e.printStackTrace();}}}}程序運(yùn)行結(jié)果【例8.9】文件拷貝的緩沖改進(jìn)。字節(jié)流importjav字符流

31Reader和Writer32InputStreamReader和OutputStreamWriter33FileReader和FileWriter34

35BufferedReader和BufferedWriterCharArrayReader和CharArrayWriter字符流31Reader和Writer32InputStrWriter和Reader以字符流方式向文件寫入或從文件中讀取數(shù)據(jù),可以使用Writer和Reader類及其子類。

Writer和Reader類都是抽象類,不能建立它們的對(duì)象,所以只能通過(guò)它們子類對(duì)象對(duì)文件進(jìn)行操作。常用的Writer類的子類包括FileWriter類和BufferedWriter類。FileWriter類構(gòu)造方法如下:FileWriter(StringfileName):參數(shù)fileName表示帶路徑的磁盤文件名。FileWriter(Filefile):參數(shù)file表示為磁盤文件所建立的File對(duì)象名。

注:使用FileWriter進(jìn)行文件操作時(shí),為了減少磁盤讀寫次數(shù),常常使用具有緩沖功能的BufferedWriter類。

Writer和Reader以字符流方式向文件寫入或字符流InputStreamReader和OutputStreamWriter⑴InputStreamReader類的構(gòu)造方法和方法:◆InputStreamReader(InputStreamin):構(gòu)造一個(gè)InputStreamReader。◆InputStreamReader(InputStreamin,Stringenc):使用命名的字符編碼構(gòu)造一個(gè)InputStreamReader?!魐oidclose():關(guān)閉流?!鬝tringgetEncoding():得到字符編碼的名稱?!鬷ntread():讀取一個(gè)字符?!鬷ntread(char[]cbuf,intoff,intlen):將字符讀到數(shù)組中?!鬮ooleanready():如果這個(gè)流已準(zhǔn)備好,返回True。⑵OutputStreamWriter類的構(gòu)造方法和方法:◆OutputStreamWriter(OutputStreamout):構(gòu)造一個(gè)OutputStreamWriter。◆OutputStreamWriter(OutputStreamout,Stringenc):使用命名的字符編碼構(gòu)造一個(gè)OutputStreamWriter?!魐oidclose():關(guān)閉流?!魐oidflush():刷新流?!鬝tringgetEncoding():得到這個(gè)流使用的字符編碼的名稱?!魐oidwrite(char[]cbuf,intoff,intlen):寫字符數(shù)組的一部分?!魐oidwrite(intc):寫一個(gè)字符?!魐oidwrite(Stringstr,intoff,intlen):寫一個(gè)字符串的一部分。字符流InputStreamReader和OutputStr【例8.10】利用InputStreamReader從鍵盤接受輸入,再將輸入的字符顯示出來(lái)。字符流

importjava.io.*;classinputstreamreader{publicstaticvoidmain(Stringargs[]){try{intcharacter;InputStreamReaderinstreamread=newInputStreamReader(System.in);//InputStreamReader以字符形式讀取輸入while((character=instreamread.read())!=-1){System.out.print((char)character);}}catch(IOExceptione){}}System.out.print(“Bye”);}運(yùn)行結(jié)果:輸入:a,b,c,d輸出:a,b,c,d輸入:1,2,3,4輸出:1,2,3,4輸入:^Z輸出:Bye【例8.10】利用InputStreamReader從鍵盤接字符流FileReader◆FileReader(Filefile):構(gòu)造一個(gè)FileReader。◆FileReader(FileDescriptorfd):從一個(gè)文件描述符構(gòu)造一個(gè)FileReader?!鬎ileReader(Stringfilename):從一個(gè)文件名構(gòu)造一個(gè)FileReader。字符流FileReader◆FileReader(File【例8.11】下例中打開一個(gè)文件file.txt(內(nèi)容為:Hellofromfile),將文件的內(nèi)容讀到緩沖區(qū),然后顯示數(shù)據(jù)。字符流

importjava.io.*;publicclassfileread{publicstaticvoidmain(Stringargs[])throwsException{ FileReaderfileread=newFileReader("file.txt");//打開文件 chardata[]=newchar[1024]; intcharsread=fileread.read(data);//讀入 System.out.println(newString(data,0,charsread));//顯示 fileread.close();//關(guān)閉文件流}}程序運(yùn)行結(jié)果【例8.11】下例中打開一個(gè)文件file.txt(內(nèi)容為:H字符流FileWriter◆FileWriter(Filefile):從File對(duì)象構(gòu)造一個(gè)FileWriter?!鬎ileWriter(FileDescriptorfd):從文件描述符構(gòu)造一個(gè)FileWriter?!鬎ileWriter(Stringfilename):從文件名構(gòu)造一個(gè)FileWriter。◆FileWriter(Stringfilename,booleanappend):構(gòu)造一個(gè)可附加的FileWriter。字符流FileWriter◆FileWriter(File字符流【例8.12】下例中,分別采用三種方式:逐字符地寫數(shù)據(jù)、一次寫入所有數(shù)據(jù)、分批寫數(shù)據(jù),使用類FileWriter。importjava.io.*;publicclassfilewrite{publicstaticvoidmain(Stringargs[])throwsException{chardata[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g','','o','f','','t','e','x','t','.'};FileWriterfilewriter1=newFileWriter("file1.txt");for(intloop_index=0;loop_index<data.length;loop_index++){filewriter1.write(data[loop_index]);}FileWriterfilewriter2=newFileWriter("file2.txt");filewriter2.write(data);FileWriterfilewriter3=newFileWriter("file3.txt");filewriter3.write(data,5,10);filewriter1.close();filewriter2.close();filewriter3.close();}}運(yùn)行結(jié)果:file1.txt和file2.txt的內(nèi)容為:Thisisastringoftextfile3.txt的內(nèi)容為:isastrin字符流【例8.12】下例中,分別采用三種方式:逐字符地寫數(shù)據(jù)字符流BufferedReader和BufferedWriter這兩個(gè)類對(duì)應(yīng)的流使用了緩沖,能大大提高輸入輸出的效率。這兩個(gè)也是過(guò)濾器流,常用來(lái)對(duì)InputStreamReader和OutputStreamWriter進(jìn)行處理。字符流BufferedReader和BufferedWrit字符流【例8.13】從鍵盤接受輸入并回顯。importjava.io.*;publicclassEchotest{publicstaticvoidmain(String[]args){BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));Strings;System.out.print("pleaseenterastring:");try{while((s=in.readLine()).length()!=0)System.out.println("輸入是:"+s);}catch(IOExceptione){e.printStackTrace();}}}程序運(yùn)行結(jié)果字符流【例8.13】從鍵盤接受輸入并回顯。importj字符流CharArrayReader和CharArrayWriter⑴CharArrayReader類的構(gòu)造方法和方法如下:◆CharArrayReader(char[]buf):從給定的字符數(shù)組構(gòu)造一個(gè)CharArrayReader。◆CharArrayReader(char[]buf,intoffset,intlength):同上?!魐oidclose():關(guān)閉流?!魐oidmark(intreadAheadLimit):在流中的當(dāng)前位置加標(biāo)記?!鬮ooleanmarkSupported():如果這個(gè)流支持mark操作,那么返回True。◆intread():讀取一個(gè)字符?!鬷ntread(char[]b,intoff,intlen):將讀入數(shù)組的一部分?!鬮ooleanready():檢查這個(gè)流是否已經(jīng)準(zhǔn)備好被讀取。◆voidreset():將流重設(shè)到最近的標(biāo)記?!鬺ongskip(longn):跳過(guò)n個(gè)字符。(2)CharAraayWriter類的構(gòu)造方法和方法同上類似。字符流CharArrayReader和CharArrayWr字符流【例8.14】下例演示CharArrayReader類的作用,該例從字符數(shù)組中逐個(gè)讀取字符并顯示。chararrayreader.javaimportjava.io.*;publicclasschararrayreader{publicstaticvoidmain(Stringargs[])throwsIOException{chardata[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g','','o','f','','t','e','x','t','.'};CharArrayReaderchararrayreader=newCharArrayReader(data);intcharacter;while((character=chararrayreader.read())!=-1){System.out.print((char)character);}}}運(yùn)行結(jié)果:Thisisastringoftext.字符流【例8.14】下例演示CharArrayReader類文件的隨機(jī)訪問(wèn)

31在java中,類RandomAccessFile提供了隨機(jī)訪問(wèn)文件的方法◆RandomAccessFile(Filefile,Stringmode):構(gòu)造一個(gè)隨機(jī)訪問(wèn)文件流,file為被訪問(wèn)的文件對(duì)象,mode是用來(lái)指定存取的模式,mode可以為r(讀)、w(寫)或rw(讀寫)?!鬜andomAccessFile(Stringname,Stringmode):構(gòu)造一個(gè)隨機(jī)訪問(wèn)文件流,以便訪問(wèn)由字符串name指定名字的文件,mode參數(shù)使用同上32RandomAccessFile類提供用來(lái)讀取某種基本數(shù)據(jù)類型的數(shù)據(jù)或字符串的方法◆booleanreadBoolean()◆bytereadByte()◆charreadChar()◆doublereadDouble()◆floatreadFloat()◆intreadInt()◆longreadLong()◆shortreadShort()◆StringreadLine()33RandomAccessFile類提供用來(lái)向文件中寫入某種基本類型的數(shù)據(jù)或字符串的方法◆voidwriteByte(byteb)◆voidwriteBytes(Strings)◆voidwriteChar(charc)◆voidwriteChars(Strings)◆voidwriteDouble(doubled)◆voidwriteFloat(floatf)◆voidwriteInt(inti)◆voidwriteLong(longl)◆voidwriteShort(shorts)34和目前文件位置有關(guān)的方法◆voidseek(longpos):將文件指針移到pos(不可為負(fù))的位置,相對(duì)于文件初始位置值(初始值為0)?!鬺onggetFilePointer():得到目前文件指針的位置(相對(duì)于文件初始位置)。◆longlength():得到文件的長(zhǎng)度。◆intskipBytes(intn):使文件指針向前移動(dòng)指定的n個(gè)字節(jié)文件的隨機(jī)訪問(wèn)31在java中,類RandomAccess文件的隨機(jī)訪問(wèn)【例8.15】把若干個(gè)32位整數(shù)寫到一個(gè)名為test.txt的文件中,利用seek()方法,以相反的順序讀取這些數(shù)據(jù)。importjava.io.*;publicclassRandomFile{publicstaticvoidmain(Stringargs[]){RandomAccessFileraf=null;intdata[]={12,31,56,23,27,1,43,65,4,99};try{raf=newRandomAccessFile("test.txt","rw");for(inti=0;i<data.length;i++)raf.writeInt(data[i]);for(inti=data.length-1;i>=0;i--){raf.seek(i*4);System.out.println(raf.readInt());}catch(Exceptione){e.getMessage();}finally{if(raf!=null)try{raf.close();}catch(Exceptione){e.getMessage();}}}}程序運(yùn)行結(jié)果文件的隨機(jī)訪問(wèn)【例8.15】把若干個(gè)32位整數(shù)寫到一個(gè)名為t使用DataOutputStream類向文件中寫入各種類型數(shù)據(jù)的操作步驟:1、為磁盤文件建立File類對(duì)象;2、為該File對(duì)象建立FileOutputStream類流對(duì)象,建立其與磁盤文件的連接;3、為該FileOutputStream類對(duì)象建立DataOutputStream類對(duì)象,利用DataOutputStream類的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法分別向文件中寫入整型、單精度型、雙精度型、布爾型等數(shù)據(jù);4、寫入操作完成后,利用close()方法將流關(guān)閉,斷開與磁盤文件的聯(lián)系。

DataOutputStream流類使用DataOutputStream類向文件中寫入各種importjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{intch;Filefile1=newFile("c:\\jdk1.3\\example\\dataFile.txt");Filefile2=newFile("c:\\jdk1.3\\example\\outFile.txt");try{FileInputStreamfin=newFileInputStream(file1);DataInputStreamdin=newDataInputStream(fin);inti=din.readInt();floatf=din.readFloat();booleanb=din.readBoolean();din.close();從磁盤文件讀取各類數(shù)據(jù)【例8.16】importjava.io.*;從磁盤文件讀取各類數(shù)據(jù)【FileOutputStreamfout=newFileOutputStream(file2);DataOutputStreamdout=newDataOutputStream(fout);dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close();System.out.println("整數(shù):"+i);System.out.println("浮點(diǎn)數(shù):"+f);System.out.println("布爾量:"+b);}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}從磁盤文件讀取各類數(shù)據(jù)FileOutputStreamfout=newFilimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args){intch;InputStreamReaderiin=newInputStreamReader(System.in);BufferedReaderbin=newBufferedReader(iin);Filefile1=newFile("c:\\jdk1.3\\example\\dataFile.txt");try{FileOutputStreamfout=newFileOutputStream(file1);DataOutputStreamdout=newDataOutputStream(fout);System.out.println("輸入整數(shù)");inti=Integer.parseInt(bin.readLine());System.out.println("輸入浮點(diǎn)數(shù)");

向磁盤文件寫入各類數(shù)據(jù)【例8.17】importjava.io.*;向磁盤文件寫入各類數(shù)據(jù)【例floatf=Float.parseFloat(bin.readLine());System.out.println("輸入布爾量");booleanb=newBoolean(bin.readLine()).booleanValue();dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

向磁盤文件寫入各類數(shù)據(jù)floatf=Float.parseFlimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{intch;Filefile1=newFile("c:\\jdk1.3\\example\\newFile.txt");try{FileInputStreamfin=newFileInputStream(file1);System.out.println("文件中的信息為:");ch=fin.read();while(ch!=-1){System.out.print((char)ch);ch=fin.read();}fin.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

以字節(jié)流方式讀磁盤文件【例8.18】importjava.io.*;catch(FileNoimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{charch;Filefile1=newFile("c:\\jdk1.3\\example\\newFile.txt");try{FileOutputStreamfout=newFileOutputStream(file1);System.out.println("輸入任一字符串,以?結(jié)束");ch=(char)System.in.read();while(ch!='?'){fout.write(ch);ch=(char)System.in.read();}fout.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

以字節(jié)流方式寫入文件【例8.19】importjava.io.*;catch(FileNimportjava.io.*;publicclassFile{publicstaticvoidmain(Stringargs[]){FileReaderfr;intch;try{fr=newFileReader("c:\\Ex11_5.java");while((ch=fr.read())!=-1){System.out.print((char)ch);}}catch(Exceptione){e.printStackTrace();}}}以字符流方式讀文件【例8.20】用FileReader一個(gè)字符一個(gè)字符地讀取整個(gè)文件。importjava.io.*;以字符流方式讀文件【例8.【例8.21】應(yīng)用類RandomAccessFile編寫程序,實(shí)現(xiàn)將兩個(gè)磁盤文件"input1.txt“和"input2.txt"中的內(nèi)容合并,并顯示在屏幕上。

importjava.io.*;publicclassFile{publicstaticvoidmain(Stringargs[]){Strings="";try{RandomAccessFilef1=newRandomAccessFile("c:/input1.txt","rw");RandomAccessFilef2=newRandomAccessFile("c:/input2.txt","rw");s=f1.readLine()+f2.readLine();charc[]=s.toCharArray();for(inti=0;i<s.length();i++)System.out.print(c[i]);System.out.println();}catch(Exceptione){}}}隨機(jī)讀寫文件【例8.21】應(yīng)用類RandomAccessFile編寫程序?qū)嵗?

設(shè)計(jì)一個(gè)如圖所示界面,用戶在文本區(qū)輸入文本以后,當(dāng)單擊按鈕"保存文件"后,則將文本區(qū)的內(nèi)容寫入到指定的文件中。實(shí)例1設(shè)計(jì)一個(gè)如圖所示界面,用戶importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassExextendsWindowAdapterimplementsActionListener{ Framef; Buttonbtn; TextAreata; StringfileName; publicstaticvoidmain(Stringargv[]) { newEx("output.txt"); } publicEx(StringfileName) { this.fileName=fileName; f=newFrame(fileName); f.addWindowListener(this); btn=newButton("保存文件"); btn.addActionListener(this); ta=newTextArea(10,40);

實(shí)例1

importjava.awt.*;實(shí)例1f.add(ta,BorderLayout.CENTER); f.add(btn,BorderLayout.SOUTH); f.pack(); f.setVisible(true); }publicvoidactionPerformed(ActionEvente) { try{ FileOutputStreamfout=newFileOutputStream(fileName); bytebuf[]=ta.getText().getBytes(); fout.write(buf); fout.close(); } catch(IOExceptionioe) { System.err.println(e); } } publicvoidwindowClosing(WindowEvente) { System.exit(0); }}實(shí)例1

【例8.22】實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件編輯器。importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassFileEditextendsWindowAdapterimplementsActionListener,TextListener{Framef;TextAreata1;Panelp1;TextFieldtf1;Buttonb1,b2,b3;FileDialogfd;Filefile1=null;publicstaticvoidmain(Stringargs[]){(newFileEdit()).display();}實(shí)例2

【例8.22】實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件編輯器。importjapublicvoiddisplay(){f=newFrame("FileEdit");f.setSize(680,400);f.setLocation(200,140);f.setBackground(Color.lightGray);f.addWindowListener(this);tf1=newTextField();tf1.setEnabled(false);tf1.setFont(newFont("Dialog",0,20));//設(shè)置文本行的初始字體f.add(tf1,"North");ta1=newTextArea();ta1.setFont(newFont("Dialog",0,20));//設(shè)置文本區(qū)的初始字體f.add(ta1);ta1.addTextListener(this);//注冊(cè)文本區(qū)的事件監(jiān)聽程序p1=newPanel();p1.setLayout(newFlowLayout(FlowLayout.LEFT));

實(shí)例2

publicvoiddisplay(){實(shí)例2b1=newButton("Open");b2=newButton("Save");b3=newButton("SaveAs");p1.add(b1);p1.add(b2);p1.add(b3);b2.setEnabled(false);b3.setEnabled(false);b1.addActionListener(this);//注冊(cè)按鈕的事件監(jiān)聽程序b2.addActionListener(this);b3.addActionListener(this);f.add(p1,"South");f.setVisible(true);}publicvoidtextValueChanged(TextEvente){//實(shí)現(xiàn)TextListener接口中的方法,對(duì)文本區(qū)操作時(shí)觸發(fā)b2.setEnabled(true);b3.setEnabled(true);}實(shí)例2

b1=newButton("Open");實(shí)例2publicvoidactionPerformed(ActionEvente){if(e.getSource()==b1){//單擊[打開]按鈕時(shí)fd=newFileDialog(f,"Open",FileDialog.LOAD);fd.setVisible(true);//創(chuàng)建并顯示打開文件對(duì)話框if((fd.getDirectory()!=null)&&(fd.getFile()!=null)){tf1.setText(fd.getDirectory()+fd.getFile());try//以緩沖區(qū)方式讀取文件內(nèi)容{file1=newFile(fd.getDirectory(),fd.getFile());FileReaderfr=newFileReader(file1);BufferedReaderbr=newBufferedReader(fr);Stringaline;while((aline=br.readLine())!=null)//按行讀取文本ta1.append(aline+"\r\n");fr.close();br.close();}catch(IOExceptionioe){System.out.println(ioe);}}}實(shí)例2

publicvoidactionPerformed(Acif((e.getSource()==b2)||(e.getSource()==b3)){//單擊[保存]按鈕時(shí)if((e.getSource()==b3)||(e.getSource()==b2)&&(file1==null)){//單擊[SaveAs]按鈕時(shí),或單擊[Save]按鈕且文件對(duì)象為空時(shí)fd=newFileDialog(f,"Save",FileDialog.SAVE);if(file1==null)fd.setFile("Edit1.txt");elsefd.setFile(file1.getName());fd.setVisible(true);//創(chuàng)建并顯示保存文件對(duì)話框if((fd.getDirectory()!=null)&&(fd.getFile()!=null)){tf1.setText(fd.getDirectory()+fd.getFile());file1=newFile(fd.getDirectory(),fd.getFile());save(file1);}}實(shí)例2

if((e.getSource()==b2)||(e.gelsesave(file1);}}publicvoidsave(Filefile1){try{//將文本區(qū)內(nèi)容寫入字符輸出流FileWriterfw=newFileWriter(file1);fw.write(ta1.getText());fw.close();b2.setEnabled(false);b3.setEnabled(false);}catch(IOExceptionioe){System.out.println(ioe);}}publicvoidwindowClosing(WindowEvente){System.exit(0);}}實(shí)例2

else實(shí)例2【例8.2】對(duì)Test.txt及其上一級(jí)目錄的File類對(duì)象進(jìn)行操作。

目錄和文件管理

——File類importjava.io.*;publicclassfileTest//創(chuàng)建一個(gè)文件{publicstaticvoidmain(Stringargs[]){Filef=newFile("parent\\fileTest.txt");Filef1=newFile("newfileTest.txt");try{System.out.println(f.getParent());System.out.println(f.getName());System.out.println(f1.getPath());System.out.println(f1.getAbsolutePath());}catch(Exceptione){e.printStackTrace();}}}程序運(yùn)行結(jié)果【例8.2】對(duì)Test.txt及其上一級(jí)目錄的File類對(duì)象【例8.3】建立

test.txt

文件對(duì)象,判斷是否存在,如果不存在就創(chuàng)建之。importjava.io.*;publicclassCreateNewFile{publicstaticvoidmain(Stringargs[]){Filef=newFile("test.txt");try{if(!f.exists())f.createNewFile();elseSystem.out.println("exists");}catch(Exceptione){e.printStackTrace();}}}目錄和文件管理

——File類【例8.3】建立

test.txt

文件對(duì)象,判斷是否存在,【例8.4】創(chuàng)建文件夾Dir以及文件夾dir/cdir。目錄和文件管理

——File類importjava.io.*;publicclassCreateDir{publicstaticvoidmain(Stringargs[]){Filef=newFile("test.txt");Filef1=newFile("Dir");Filef2=newFile("dir/cdir");Filef3=newFile("newTest.txt");try{f.renameTo(f3);//把test.txt改名為newTest.txtf1.mkdir();//創(chuàng)建目錄Dirf2.mkdirs();//創(chuàng)建目錄dir及其子目錄cdir}catch(Exceptione){e.printStackTrace();}}}【例8.4】創(chuàng)建文件夾Dir以及文件夾dir/cdir。目錄【例8.5】使用File類的方法獲取文件file.txt的屬性信息。目錄和文件管理

——File類的應(yīng)用importjava.io.*;publicclassfile{publicstaticvoidmain(String[]args){Filefl=newFile("file.txt");System.out.println("Thefileisexist?"+fl.exists());System.out.println("Thefilecanwrite?"+fl.canWrite());System.out.println("Thefilecanread?"+fl.canRead());System.out.println("Thefileisafile?"+fl.isFile());System.out.println("Thefileisadirectory?"+fl.isDirectory());System.out.println("Thefile'snameis:"+fl.getName());System.out.println("Thefile'sallpathis:"+fl.getAbsolutePath());System.out.println("Thefile'slengthis"+fl.length());} }程序運(yùn)行結(jié)果【例8.5】使用File類的方法獲取文件file.txt的屬【例8.6】列出Dir目錄下的所有文件和目錄(Stringlist()),最后修改時(shí)間;若為目錄則在其后面標(biāo)出<DIR>,若為文件,則在其后面標(biāo)出文件長(zhǎng)度(提示:方法long

lastModified()能夠返回自1970.1.1起

到最后修改時(shí)間之間的秒數(shù))。importjava.io.*;importjava.util.*;publicclasstestDir{publicstaticvoidmain(Stringargs[]){Filef=newFile("Dir");String[]listAll=null;Filetemp=null;try{listAll=f.list();for(inti=0;i<listAll.length;i++){temp=newFile(listAll[i]);System.out.print(listAll[i]+"\t");if(temp.isDirectory())System.out.print("\t<DIR>\t");elseSystem.out.print(temp.length()+"\t");System.out.println(newDate(temp.lastModified()));}}catch(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論