




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章Java輸入輸出系統(tǒng)Java程序設(shè)計(jì)與實(shí)踐教程—清華大學(xué)出版社本章目錄流的基本概念1字節(jié)流2字符流3File類4System.in和System.out對象5FileInputStream類和FileOutputStream類6FileReader類和FileWriter類
7過濾流8文件的隨機(jī)訪問9案例分析:多種流的實(shí)現(xiàn)10教學(xué)目標(biāo)掌握流的基本概念掌握J(rèn)ava中各種常用輸入/輸出流的基本用法能夠熟練地編寫應(yīng)用程序解決文件的讀寫問題。教學(xué)重點(diǎn)字節(jié)流與字符流的區(qū)別File類的使用過濾流的合理使用文件的隨機(jī)訪問操作8.1流的基本概念java.io包:支持流的輸入輸出十分巨大,定義了大約60個類,包含大量方法要了解更多的信息參看API文檔在Java1.3及其以后的版本中,讀寫文件的唯一手段就是使用流。8.1流的基本概念流(stream):是輸入和輸出設(shè)備的一種抽象表示,這些設(shè)備是數(shù)據(jù)源或數(shù)據(jù)終點(diǎn)??梢韵蛄髦袑懭霐?shù)據(jù),也可以從流中讀出數(shù)據(jù)。大家可以把流想象為流入自己程序或從自己程序中流出的字節(jié)序列。8.1流的基本概念為什么引入流作為的基本輸入輸出操作?讓實(shí)現(xiàn)這些操作的程序編碼獨(dú)立于所涉及的設(shè)備。這樣做的好處有兩點(diǎn):不必?fù)?dān)心各種設(shè)備的具體工作機(jī)制,對于它們的管理均在幕后進(jìn)行。用戶的程序可以適用于各種輸入輸出設(shè)備,改變輸入輸出設(shè)備時不用改寫程序編碼。8.1流的基本概念流式輸入輸出的特點(diǎn)每個數(shù)據(jù)都必須等待排在它前面的數(shù)據(jù)讀入或送出之后才能被讀寫;每次讀寫操作處理的都是序列中剩余的未讀寫數(shù)據(jù)中的第一個,而不能隨意選擇輸入輸出的位置。8.1流的基本概念文件程序終端文件程序網(wǎng)絡(luò)端點(diǎn)數(shù)據(jù)流起點(diǎn)終點(diǎn)網(wǎng)絡(luò)端點(diǎn)文件,字符串存儲區(qū)8.1流的基本概念Java中有兩種基本的流(1)輸入流:打開流→當(dāng)流中還有數(shù)據(jù)時執(zhí)行讀操作→關(guān)閉流。(2)輸出流:打開流→當(dāng)有數(shù)據(jù)需要輸出時執(zhí)行寫操作→關(guān)閉流。8.1流的基本概念輸出流:從計(jì)算機(jī)流向外設(shè)的數(shù)據(jù)序列,即把數(shù)據(jù)寫入流時,該流稱為輸出流。輸出流可以通往任何可以傳輸字節(jié)序列的設(shè)備,例如硬盤上的文件,或連接用戶系統(tǒng)至遠(yuǎn)程系統(tǒng)的電話線路。輸出流也可以通向顯示器,但這會大大限制其真正的功能。輸入流:從外設(shè)流入計(jì)算機(jī)的數(shù)據(jù)序列;8.1流的基本概念程序輸入流輸出流數(shù)據(jù)數(shù)據(jù)顯示器鍵盤8.1流的基本概念1.輸入流(Inputstream)
通過打開一個到數(shù)據(jù)源(文件、內(nèi)存或網(wǎng)絡(luò)端口上的數(shù)據(jù))的輸入流,程序可以從數(shù)據(jù)源上順序讀取數(shù)據(jù)。讀數(shù)據(jù)的邏輯為:openastreamwhilemoreinformationreadinformationclosethestream8.1流的基本概念2.輸出流(Outputstream)
通過打開一個到目標(biāo)的輸出流,程序可以向外部目標(biāo)順序?qū)憯?shù)據(jù)8.1流的基本概念2.輸出流
(Outputstream)文件,當(dāng)向其中寫數(shù)據(jù)時,它就是一個輸出流;當(dāng)從其中讀取數(shù)據(jù)時,它就是一個輸入流。鍵盤只是一個輸入流,屏幕只是一個輸出流。寫數(shù)據(jù)的邏輯為:openastreamwhilemoreinformationwriteinformationclosethestream8.1流的基本概念另外,根據(jù)流中數(shù)據(jù)單位的不同,可將流分為字節(jié)流和字符流。(1)字節(jié)流:流中數(shù)據(jù)以8位字節(jié)為單元進(jìn)行讀寫。(2)字符流:流中數(shù)據(jù)以16位字符為單位進(jìn)行讀寫。8.1流的基本概念java.io包支持兩種類型的流:字符流類(CharacterStreams)
字符流類用于向字符流讀寫16位二進(jìn)制字符。字節(jié)流類(ByteStreams)字節(jié)流類用于向字節(jié)流讀寫8位二進(jìn)制的字節(jié)。一般地,字節(jié)流類主要用于讀寫諸如圖象或聲音等的二進(jìn)制數(shù)據(jù)。
8.1流的基本概念java.io中的基本流類:說明:它們是抽象類,不能直接創(chuàng)建對象。ByteStreamsCharacterStreamsInputStreamReaderOutputStreamWriter8.2字節(jié)流InputStream類和OutputStream類是字節(jié)流的兩個頂層父類。它們提供了輸入流類與輸出流類的通用API。字節(jié)流一般用于讀寫二進(jìn)制數(shù)據(jù),例如圖像和聲音數(shù)據(jù)。有兩個字節(jié)流ObjectInputStream和ObjectOutputStream是用來實(shí)現(xiàn)對象的串行化,即對象的輸入輸出。8.2字節(jié)流1.InputStream類8.2字節(jié)流InputStream類的主要方法read():從流中讀入數(shù)據(jù)skip():跳過流中若干字節(jié)數(shù)available():返回流中可用字節(jié)數(shù)mark():在流中標(biāo)記一個位置reset():返回標(biāo)記過的位置
markSupport():是否支持標(biāo)記和復(fù)位操作
close():關(guān)閉流8.2字節(jié)流InputStreamAudioInputStreamFileInputStreamObjectInputStreamSequenceInputStreamByteArrayInputStreamPipedInputStreamFilterInputStream用于讀取音頻數(shù)據(jù)用于讀取文件中的數(shù)據(jù)用于讀取流中的對象用于讀取流序列用于讀取字節(jié)數(shù)組用于讀取管道流用于過濾現(xiàn)有流的輸入8.2字節(jié)流FilterInputStream類有9個直接子類,它們提供對輸入流數(shù)據(jù)過濾或轉(zhuǎn)換的更多的特殊方式。BufferedInputStreamDataInputStreamCheckedInputStreamCipherInputStreamDigestInputStreamInflaterInputStreamLineNumberInputStreamProgressMonitorInputStreamPushbackInputStream輸8.2字節(jié)流BufferedInputStream把流包裝到BufferedInputStream對象中的效果是將基本數(shù)據(jù)流緩沖入內(nèi)存,使得一次可以從流中讀入大塊數(shù)據(jù)(其最大值取決于緩沖區(qū)的大小),然后讓read方法可以直接從內(nèi)存緩沖區(qū)中讀取數(shù)據(jù),當(dāng)緩沖區(qū)為空時,僅從基本數(shù)據(jù)流執(zhí)行一次真正的讀操作。BufferedInputStreamkeyboard=newBufferedInputStream(System.in);8.2字節(jié)流2.OutputSteam類8.2字節(jié)流write(intb):將一個整數(shù)輸出到流中(只輸出低位字節(jié),為抽象方法)write(byteb[]):將字節(jié)數(shù)組中的數(shù)據(jù)輸出到流中write(byteb[],intoff,intlen):將數(shù)組b中從off指定的位置開始,長度為len的數(shù)據(jù)輸出到流中flush():刷空輸出流,并將緩沖區(qū)中的數(shù)據(jù)強(qiáng)制送出close():關(guān)閉流8.2字節(jié)流OutputStreamFileOutputStreamObjectOutputStreamByteArrayOutputStreamPipedOutputStreamFilterOutputStream用于向文件寫用于將對象寫入流用于向字節(jié)數(shù)組寫用于向流管道寫用于過濾現(xiàn)有流的輸出8.3字符流字符流能夠處理Unicode字符集中所有的字符,而字節(jié)流限于處理ISO-Latin-1的8位字節(jié)字符流采用了統(tǒng)一的編碼標(biāo)準(zhǔn),可國際化使用字符流來讀寫文本類數(shù)據(jù)。Reader類和Writer類是java.io包中兩個字符流類的頂層抽象父類。8.3字符流Reader和Writer都是抽象類。Reader和Writer對象通常使用InputStream或OutputStream對象來創(chuàng)建InputStream或OutputStream對象封裝了與最終數(shù)據(jù)源或數(shù)據(jù)終點(diǎn)這種外設(shè)的連接。8.3字符流ReaderInputStreamReaderBufferedReaderPipedReaderCharArrayReaderStringReader用于讀取字符流用于緩沖其他Readers類用于讀取PipedWriter用于讀取字符數(shù)組用于讀取字符串FilterReader用于讀取過濾后的流8.3字符流用于像讀取字符流一樣讀取二進(jìn)制輸入流的具體類是InputStreamReader。InputStreamReader類定義了3種read()方法,這些方法將從基本流中讀取一個或多個字節(jié),并且使用默認(rèn)轉(zhuǎn)換方式將它們由本地字符編碼轉(zhuǎn)換為Unicode碼后,再將它們返回。InputStreamReaderkeyboard=newInputStreamReader(System.in);如果使用BufferedReader對象來緩沖數(shù)據(jù)流,則讀取工作的效率會有所提高。CharArrayReader對象創(chuàng)建于數(shù)組,并且允許用戶從數(shù)組讀取數(shù)據(jù),就像是從字符輸入流中讀取數(shù)據(jù)一樣。StringReader對象類實(shí)質(zhì)上做相同的事情,只是處理的是String對象。BufferedReaderkeyboard=newBufferedReader(newInputStreamReader(System.in));8.3字符流8.3字符流WriterOutputStreamWriterBufferedWriterPipedWriterCharArrayWriterStringWriter用于寫字符流用于緩沖其他Writers類用于向PipedReader寫用于向字符數(shù)組寫用于向字符串寫PrintWriter用于寫格式化數(shù)據(jù)FilterWriter用于寫過濾后的流OutputStreamWriter類將字符寫入基本二進(jìn)制流中,它有一個子類FileWriter,F(xiàn)ileWriter將字符寫入封裝文件的流。PrintWriter類與打印沒有什么聯(lián)系。PrintWriter類定義了用于將二進(jìn)制數(shù)格式化為字符,并且把它寫入數(shù)據(jù)流的方法。StringWriter類與CharArrayWriter類是用于將字符數(shù)據(jù)寫入StringBuffer對象或char[]型數(shù)組。通常這些類用來執(zhí)行數(shù)據(jù)轉(zhuǎn)換,使得轉(zhuǎn)換結(jié)果可以從基礎(chǔ)數(shù)組或字符串中得到。8.3字符流8.3字符流注意:PrintWriter對象所作的格式化無助于讓輸出行中的各項(xiàng)內(nèi)容按列對齊排列。如果希望產(chǎn)生特定的格式輸出,必須自己去編寫代碼。StringWriterstrWriter=newStringWriter();PrintWriterwriter=newPrintWriter(strWriter);doublevalue=2.71828;writer.println(value);StringBufferstr=strWriter.getBuffer();8.4File類File類功能:得到文件或目錄的描述信息,包括文件名稱、所在目錄、可讀性、可寫性、長度和文件的最后修改時間等可以生成新的目錄改變文件名刪除文件列出一個目錄中所有的文件或與某個模式相匹配的文件等。8.4File類File類的構(gòu)造方法:(1)publicFile(Stringpath)參數(shù)path是包含目錄和文件名的字符串,Java把目錄看作一種特殊的文件,因此該字符串可以沒有文件名,這時若調(diào)用方法isFile()將返回false,說明File對象是目錄而不是文件。(2)publicFile(Stringpath,Stringname)path是目錄路徑(父目錄),name可包含目錄和文件名(相對于父目錄)。(3)publicFile(Filedir,Stringname)dir是一個文件對象(父目錄),child可包含目錄和文件名(相對于父目錄)。8.4File類File類的構(gòu)造方法:(1)publicFile(Stringpath)參數(shù)path是包含目錄和文件名的字符串,Java把目錄看作一種特殊的文件,因此該字符串可以沒有文件名,這時若調(diào)用方法isFile()將返回false,說明File對象是目錄而不是文件。(2)publicFile(Stringpath,Stringname)path是目錄路徑(父目錄),name可包含目錄和文件名(相對于父目錄)。(3)publicFile(Filedir,Stringname)dir是一個文件對象(父目錄),child可包含目錄和文件名(相對于父目錄)。例如:Filef1=newFile("D:/Java");Filef2=newFile("D:/Java","test.txt");Filef3=newFile(f1,"test.txt");Filef4=newFile("file:///D:/Java/test.txt")8.4File類8.4File類方法說明publicStringgetName()返回文件名。publicStringgetPath()返回文件路徑。publicStringgetAbsolutePath()返回文件絕對路徑。publicStringgetParent()返回文件的父目錄。publicbooleanexists()判斷文件是否存在。publicbooleancanWrite()判斷文件是否可寫。publicbooleancanRead()判斷文件是否可讀。publicbooleanisFile()判斷對象是否是文件。publicbooleanisDirectory()判斷對象是否是目錄。publicnativebooleanisAbsolute()如果文件名為絕對名,則返回真。8.4File類方法說明publiclonglastModified()返回文件最后修改時間。publiclonglength()返回文件長度。publicbooleanmkdir()創(chuàng)建目錄。publicbooleanrenameTo(Filedest)重命名文件。publicbooleanmkdirs()創(chuàng)建目錄及子目錄。publicString[]list()列出目錄下的所有文件和目錄。publicString[]list(FilenameFilterfilter)列出目錄下的指定文件。publicbooleandelete()刪除文件對象。publicinthashCode()為文件創(chuàng)建散列代碼。publicbooleanequals(Objectobj)判斷是否同對象obj相等。publicStringtoString()返回文件對象的字符串描述。8.4File類【例8-1】輸入一個文件名,顯示該文件的相關(guān)屬性信息。importjava.io.*;publicclassFileClass{publicstaticvoidmain(String[]args) {System.out.println("enterfilename:");charc;StringBufferbuf=newStringBuffer(); try{ while((c=(char)System.in.read())!='\n') buf.append(c); //將輸入的字符加到buf中,以回車符結(jié)尾
}catch(java.io.IOExceptione){ System.out.println("Error:"+e.toString()); } Filefile=newFile(buf.toString().trim()); //創(chuàng)建File類的file對象
if(file.exists()){ //如果文件在當(dāng)前目錄存在
System.out.println("FileName:"+file.getName());//顯示文件的文件名
System.out.println("path:"+file.getPath());//顯示文件的路徑
System.out.println("Abs.path:"+file.getAbsolutePath());//顯示文件的絕對路徑
System.out.println("Writeable:"+file.canWrite());//顯示文件是否可寫
System.out.println("Readlable:"+file.canRead());//顯示文件是否可讀
System.out.println("Length:"+(file.length())+"B");//顯示文件的大小} else//如果文件不在當(dāng)前目錄
System.out.println("Sorry,filenotfound.");//顯示文件沒有找到的提示消息
}}8.5System.in和System.out對象標(biāo)準(zhǔn)輸入輸出指在字符方式下程序與系統(tǒng)進(jìn)行交互的方式,分為以下3種:(1)標(biāo)準(zhǔn)輸入stdin,對象是鍵盤。(2)標(biāo)準(zhǔn)輸出stdout,對象是屏幕。(3)標(biāo)準(zhǔn)錯誤輸出stderr,對象也是屏幕。Java通過系統(tǒng)類System實(shí)現(xiàn)標(biāo)準(zhǔn)輸入輸出的功能,定義了3個流變量,分別為in、out和err??梢灾苯油ㄟ^System類進(jìn)行調(diào)用。8.5System.in和System.out對象1.標(biāo)準(zhǔn)輸入
read()方法:這個方法在InputStream類中是抽象的,因此它必須定義在子類中。此方法以int型返回流的下一個可讀字節(jié)。如果到達(dá)流的末尾,則方法的返回值為-1。如果I/O發(fā)生錯誤,將拋出IOException類型的異常。8.5System.in和System.out對象2.標(biāo)準(zhǔn)輸出Java的標(biāo)準(zhǔn)輸出System.out是打印輸出流PrintStream類的對象。PrintStrearn類定義了在屏幕上顯示不同類型數(shù)據(jù)的方法print()和println()。(1)println()方法println()方法可輸出多種不同類型的變量或?qū)ο?,包括boolean、double、float、int、long、char、字符數(shù)組以及Object類型的對象。(2)print()方法print()方法輸出后不換行8.5System.in和System.out對象【例8-2】輸入一個字符,在屏幕上顯示該字符。importjava.io.*;publicclassCharInput1{ publicstaticvoidmain(String[]args)throwsIOException{ //必須做異常處理
inta; try{ System.out.print("請輸入一個字符:"); a=System.in.read(); System.out.println("你輸入的字符是"+(char)a); }catch(IOExceptione){ System.out.println("錯誤信息為:"+e.toString()); }}}8.5System.in和System.out對象【例8-3】輸入一行字符,在屏幕上顯示該行字符。importjava.io.*;publicclassCharInput2{ publicstaticvoidmain(String[]args){ bytebuffer[]=newbyte[255]; System.out.println("請?jiān)谙旅孑斎胍恍凶址?); try{
System.in.read(buffer,0,255);
//System.in.read拋出異常 }catch(Exceptione){
//捕獲異常并處理
System.out.println("讀取輸入字符出錯,錯誤信息為:"+e.toString()); }
System.out.println("您剛才輸入的一行字符為:");
StringinputStr=newString(buffer);
System.out.println(inputStr); }}1.FilelnputStreamFilelnputStream用于順序訪問本地文件,從超類繼承read()、close()等方法對文件進(jìn)行操作,不支持mark()方法和reset()方法。構(gòu)造方法:(1)FilelnputStream(Stringfilepath)(2)FilelnputStream(Filefileobj)例:FilelnputStreamf1=newFilelnputStream("aa.Java")Filef=newFile("aa.Java")FilelnputStreamf2=newFilelnputStream(f);8.6FileInputStream類和FileOutputStream類8.6FileInputStream類和FileOutputStream類方法說明intavailable()返回可讀入的字節(jié)數(shù)。voidclose()關(guān)閉輸入流,并釋放任何與該流有關(guān)的資源。protectedvoidfinalize()當(dāng)讀到無用信息時,關(guān)閉該流。FileDescriptorgetFD()返回與該流有關(guān)的文件描述符(即文件的完整路徑)。intread()從輸入流中讀取一個字節(jié)的數(shù)據(jù)。intread(byte[]b)將數(shù)據(jù)讀入到一個字節(jié)數(shù)組b[]中。intread(byte[]b,intoff,intlen)將len個字節(jié)的數(shù)據(jù)讀入到一個字節(jié)型數(shù)組b[]中,從下標(biāo)off開始存放,并返回實(shí)際讀入的字節(jié)數(shù)。longskip(longn)跳過輸入流上的n個字節(jié)。2.FileOutputStream
Fileoutputstream用于向一個文本文件寫數(shù)據(jù)。它從超類中繼承write()、close()等方法。構(gòu)造方法:(1)FileOutputStream(Stringfilepath)(2)FileOutputStream(Filefileobj)(3)FileOutputStream(Stringfilepath,booleanappend)(4)FileOutputStream(Filefileobj,booleanappend)8.6FileInputStream類和FileOutputStream類8.6FileInputStream類和FileOutputStream類方法說明voidclose()關(guān)閉輸出流,并釋放任何與該流有關(guān)的資源。voidfinalize()當(dāng)寫到無用信息時,關(guān)閉該流。voidwrite(intb)將字節(jié)數(shù)據(jù)b[]寫到輸出流中。voidwrite(byte[]b)將一個字節(jié)數(shù)組b[]中的數(shù)據(jù)寫到輸出流中。longskip(longn)跳過輸出流上的n個字節(jié)。文件字節(jié)流【例8-4】建立兩個文件file1.txt和file2.txt,對文件file1.txt輸入內(nèi)容“HelloWorld!”,并將其內(nèi)容復(fù)制給file2.txt。importjava.io.*;classFilesCopy{publicstaticvoidmain(String[]args) {try{FileOutputStreamfos1=newFileOutputStream("file1.txt");//創(chuàng)建FileOutputStream對象
intb; System.out.println("請輸入字符串:");while((b=System.in.read())!='\n')fos1.write(b); //將字符寫入到輸出流中
fos1.close(); //關(guān)閉輸出流
FileInputStreamfis=newFileInputStream("file1.txt");//創(chuàng)建FileInputStream對象
FileOutputStreamfos=newFileOutputStream("file2.txt");//創(chuàng)建FileOutputStream對象
intc;while((c=fis.read())!=-1) fos.write(c); //將一個字節(jié)寫入到輸出流中
fis.close(); //關(guān)閉輸入流
fos.close(); //關(guān)閉輸出流
System.out.println("成功保存并復(fù)制!");}catch(FileNotFoundExceptione){ System.out.println("FileStreamsTest:"+e);}catch(IOExceptione){ System.out.println("FileStreamsTest:"+e);}}}FileReader類是一個以字符方式讀取文件內(nèi)容的Reader類的子類,最常用構(gòu)造方法:FileReader(StringfilePath)FileReader(Filefileobj)FileWriter類是一個以字符方式寫文件內(nèi)容的Writer類的子類,最常用構(gòu)造方法如下:FileWriter(StringfilePath)FileWriter(StringfilePath,booleanappend)FileWriter(Filefileobj)8.7FileReader類和FileWriter類8.8過濾流Java對I/O訪問還提供了同步處理機(jī)制,這就是過濾流。保證某時刻只有一個線程訪問一個I/O流。過濾流主要是由FilterInputStream和FilterOutputStream抽象類實(shí)現(xiàn),由這兩個抽象類可以派生出一些過濾子類,重寫父類FilterInputStream和FilterOutputStream的所有方法。8.8過濾流例如,BufferedInputStream可以對任何種類的輸入流進(jìn)行帶緩沖區(qū)的封裝以達(dá)到性能的改善(可減少程序I/O操作次數(shù),提高程序執(zhí)行效率)。過濾流與節(jié)點(diǎn)流的連接是通過在過濾流的構(gòu)造方法中指定入口參數(shù),即節(jié)點(diǎn)流來實(shí)現(xiàn)的。例如:FileInputStreamin=newFileInputStream(“text”);BufferedInputStreambufin=newBufferedInputStream(in);首先把過濾流連接到某個I/O上,再通過構(gòu)造方法的參數(shù)去指定連接的I/O流。8.8過濾流BufferedInputStream類/BufferedOutputStream類為了提供數(shù)據(jù)的傳輸效率,為一個流配備緩沖區(qū)(buffer),成為緩沖流。緩沖流輸入輸出是一個非常普通的性能優(yōu)化。BufferedInputStream類構(gòu)造方法:(1)publicBufferedInputStream(InputStreamin)(2)publicBufferedInputStream(InputStreamin,intsize)BufferedOutputStream類構(gòu)造方法:(1)publicBufferedOutputStream(OutputStreamout)(2)publicBufferedOutputStream(OutputStreamout,intsize)8.8過濾流DataInputStream類和DataOutputStream類
DataInputStream:從已定義的節(jié)點(diǎn)輸入流中讀取Java基本數(shù)據(jù)類型的數(shù)據(jù),如布爾型數(shù)、整型數(shù)、浮點(diǎn)數(shù)等,再生成一個數(shù)據(jù)輸入流。DataOutputStream:將Java基本數(shù)據(jù)類型數(shù)據(jù)寫到一個數(shù)據(jù)輸出流中。構(gòu)造方法如下:(1)pubilcDataInputStream(InputStreamin):創(chuàng)建一個新的DataInputStream,該流從輸入流in讀取數(shù)據(jù)。(2)pubilcDataOutputStream(OutputStreamout):在輸出流out上創(chuàng)建一個新的DataOutputStream,使DataOutputStream的輸出數(shù)據(jù)能夠輸出到輸出流out中。8.8過濾流DataInputStream類提供的讀取數(shù)據(jù)的部分方法如下:bytereadByte() booleanreadBoolean()doublereadDouble()floatreadFloat()charreadChar()shortreadshort() longreadLong() intreadInt()8.8過濾流DataOutputStream類包含與DataInputStream類讀方法相對應(yīng)的寫方法,部分方法如下:voidwriteByte(byte) voidwriteBoolean(boolean)voidwriteLong(long) voidwriteChar(char)voidwriteDouble(double) voidwriteFloat(float)voidwriteshort(short) voidwriteInt(int)voidwriteBytes(String)voidwriteChars(String)8.8過濾流【例8-5】使用過濾緩沖輸出流提高輸出效率。importjava.io.*;publicclassBufferDemo{ publicstaticvoidmain(String[]args){ try{ byteb[]={49,50,51,52,53,,5,66,67,68,69,97,98,99,100,101}; FileOutputStreamfos=newFileOutputStream("one.dat",true); BufferedOutputStreambos=newbufferedOutputStream(fos); //定義一個數(shù)據(jù)緩沖輸出流DataOutputStreamdos=newDataOutputStream(bos); //將字節(jié)數(shù)組的數(shù)據(jù)輸出到緩沖區(qū) dos.write(b,0,b.length);
dos.flush();} Catch(IOExceptione){ System.out.println(e.toString()); } } }RandomAccessFile類可實(shí)現(xiàn)對文件的隨機(jī)讀寫操作。在Java.io包中,但與包中的輸入/輸出流類不相關(guān),它不是從InputStream類或OutputStream類派生的。實(shí)現(xiàn)了Datalnput和Dataoutput接口,支持這兩個接口的過濾器將適用于RandomAccessFile8.9文件的隨機(jī)訪問1.構(gòu)造方法RandomAccessFile類提供兩個構(gòu)造方法:(1)publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundException(2)publicRandomAccessFile(Filefile,Stringmode)throwsFileNotFoundException8.9文件的隨機(jī)訪問參數(shù)mode有四種取值:①"r"―以只讀方式打開文件;②"rw"―以讀寫方式打開文件,則用一個RandomAccessFile對象就可以同時進(jìn)行讀、寫兩種操作;③"rwd"―以讀寫方式打開文件,并且要求對文件內(nèi)容的更新要同步地寫到底層存儲設(shè)備;④"rws"-與“rwd”基本相同,只是還可以更新文件的元數(shù)據(jù)(MetaData)。8.9文件的隨機(jī)訪問2.隨機(jī)存取文件的操作(1)文件引用的操作文件引用的運(yùn)行規(guī)律:一是新建RandomAccessFile對象的文件引用位于文件的開頭處
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)用耗材購銷合同
- 品牌服務(wù)協(xié)議合同
- 會議場地租賃費(fèi)用合同
- 電力系統(tǒng)自動化控制原理測試卷
- 教學(xué)場地租賃合同協(xié)議
- 國際貿(mào)易合同樣書一年
- 樓面天棚保溫施工方案
- 五方通話對講布線施工方案
- 嘉定區(qū)衛(wèi)生間施工方案
- 礦場塌陷區(qū)改造方案
- 工程部SOP(標(biāo)準(zhǔn)操作手冊)
- 消費(fèi)者行為學(xué)課件
- 【小升初】部編版2022-2023學(xué)年四川省綿陽市語文升學(xué)分班考真題專項(xiàng)模擬試卷(04 現(xiàn)代文閱讀)含解析
- 人教版(2019)高中英語必修第二冊:Unit5Music單元測試(含答案與解析)
- 21級全新版大學(xué)進(jìn)階英語2 國際班 教案
- 圖解心經(jīng)心得整理分享PPT課件
- 武漢市第五醫(yī)院重離子治療中心項(xiàng)目可行性研究報(bào)告
- (完整版)學(xué)生課堂學(xué)習(xí)自我評價表
- 《英語專業(yè)畢業(yè)論文寫作指導(dǎo)》
- SAE-J400-2002-中文版
- 不銹鋼電梯門套安裝技術(shù)交底_
評論
0/150
提交評論