《Java程序設(shè)計》課件-javacp11 流和文件_第1頁
《Java程序設(shè)計》課件-javacp11 流和文件_第2頁
《Java程序設(shè)計》課件-javacp11 流和文件_第3頁
《Java程序設(shè)計》課件-javacp11 流和文件_第4頁
《Java程序設(shè)計》課件-javacp11 流和文件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十一章

流和文件

Java程序設(shè)計教程本章主要內(nèi)容Java的輸入/輸出流模型字符流的處理字節(jié)流的處理文件小結(jié)2024/12/24李飛——計算中心2/3011.1Java的輸入/輸出流模型流:流是指在計算機(jī)的輸入與輸出之間運(yùn)動的數(shù)據(jù)的序列,就像水管中的水流。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心3/35輸入流:代表從外設(shè)流入計算機(jī)的數(shù)據(jù)序列。輸出流:代表從計算機(jī)流向外設(shè)的數(shù)據(jù)序列。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心4/35通過流讀取數(shù)據(jù)的基本流程2024/12/24李飛——東北大學(xué)秦皇島分校計算中心5/35Java中與相關(guān)的類2024/12/24李飛——東北大學(xué)秦皇島分校計算中心6/35

11.2字符流的處理2024/12/24李飛——東北大學(xué)秦皇島分校計算中心7/35ReaderBufferedReaderLineNumberReaderCharArrayReaderInputStreamReaderFileReaderFileterReaderPushbackReaderPipedReaderStringReader

11.2字符流的處理2024/12/24李飛——東北大學(xué)秦皇島分校計算中心8/35WriterBufferedWriterCharArrayWriterOutputStreamWriterFileWriterFileterWriterStringWriterPipedwriterPrinterWriterStringWriter字符輸入相關(guān)的方法(read類)方法功能read()讀取一個字符,返回范圍在0~65535之間的int值,如果已到達(dá)流的末尾,則返回-1。read(char[]cbuf)將字符讀入數(shù)組cbuf。返回讀取的字符數(shù),如果已到達(dá)流的末尾,則返回-1。read(CharBuffertarget)試圖將字符讀入指定的字符緩沖區(qū)。ready()判斷是否準(zhǔn)備讀取此流。reset()重置該流。skip(longn)跳過n個字符。mark(intreadAheadLimit)標(biāo)記流中的當(dāng)前位置。close()關(guān)閉流并釋放與之關(guān)聯(lián)的所有資源。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心9/35例11.1:從標(biāo)準(zhǔn)輸入設(shè)備輸入數(shù)據(jù)。importjava.io.*;publicclasseg111{ publicstaticvoidmain(String[]args){ Readerreader=newInputStreamReader(System.in); try{ for(inti=0;i<5;i++){//讀入并輸出前5個字符 charc=(char)reader.read(); System.out.print(""+c); } System.out.println(); reader.close(); }catch(IOExceptionex){ ex.printStackTrace(); } }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心10/35字符輸出相關(guān)的方法(Writer)方法功能append(charc)將字符c添加到writer。append(CharSequencecsq)將字符序列添加到writer。append(CharSequencecsq,intstart,intend)將指定字符序列的子序列添加到writer。write(char[]cbuf)寫入字符數(shù)組。write(intc)寫入單個字符。write(Stringstr)寫入字符串。write(Stringstr,intoff,intlen)寫入字符串的某一部分。close()關(guān)閉此流,但要先刷新它。flush()刷新該流的緩沖。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心11/35例11.2:把一個字符串寫到文件h.txt中。importjava.io.*;publicclasseg11_2{publicstaticvoidmain(String[]args)throwsIOException{Stringstr=newString("HelloWorld!");Stringstr1="mynameisJava。";Writerfw=newFileWriter("h.txt");//創(chuàng)建一個h.txt文件

fw.write(str1);//通過管道把str1寫入文件h.txtfw.append(str,6,12);//把World!寫入到文件fw.close();}}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心12/35其他字符流的使用常用的字符流類用于在數(shù)據(jù)流中需要完成字符和字節(jié)轉(zhuǎn)換的情況。InputStreamReader類OutputStreamWriter類帶有默認(rèn)緩沖的字符輸入流和輸出流,通常用于整行字符或整段字符的讀寫

BufferedReader類BufferedWriter類以讀寫字符文件為目地的文件內(nèi)容讀寫流FileReader類FileWriter類。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心13/3511.3字節(jié)流的處理

2024/12/24李飛——東北大學(xué)秦皇島分校計算中心14/35InputStreamFileInputStreamPipedInputStreamFilterInputStreamLineNumberInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamByteArrayInputStreamSquenceInputStreamStringBufferInputStreamObjectInputStreamOutputStreamFileOutputStreamPipedOutputStreamFilterOutputStreamDataOutputStreamBufferedOutputStreamPrintOutputStreamByteArrayOutputStreamObjectInputStreamInputStream類常用方法方法功能read()從輸入流中讀取數(shù)據(jù)的下一個字節(jié),并返回0-255間的整數(shù)。read(byte[]b)從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)數(shù)組b中,并返回讀取的字節(jié)數(shù)。skip(longn)跳過和丟棄此輸入流中數(shù)據(jù)的n個字節(jié)available()返回輸入流可以讀?。ɑ蛱^)的字節(jié)數(shù)。close()關(guān)閉輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。reset()重置輸入流的讀取位置。mark(intreadlimit)在輸入流中標(biāo)記當(dāng)前的位置。read(byte[]b,intoff,intlen)將輸入流中讀取len個數(shù)據(jù)存入數(shù)組b從索引off開始的位置,并返回讀取字節(jié)數(shù)。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心15/35OutputStream類常用方法方法功能write(byte[]b)將b.length個字節(jié)從b數(shù)組寫入此輸出流。flush()刷新輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)。write(byte[]b,intoff,intlen)將b數(shù)組中偏移量off開始的len個字節(jié)寫入輸出流。write(intb)將b個的字節(jié)寫入此輸出流。close()關(guān)閉輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心16/35例11.5:通過InputStream和OutputStream復(fù)制圖形文件importjava.io.*;publicclasseg115{ publicstaticvoidmain(String[]args)throwsIOException{ Filefile=newFile("jpg/j1.jpg"); Fileoutfile=newFile("jpg/j4.jpg"); FileInputStreamfis=newFileInputStream(file);//文件輸入流 FileOutputStreamfos=newFileOutputStream(outfile);//定義文件輸出流 InputStreamis=newBufferedInputStream(fis);//字節(jié)輸入流 OutputStreamos=newBufferedOutputStream(fos);//字節(jié)輸出流 inti=0; while(i!=-1){ i=is.read(); os.write(i); } is.close(); os.close(); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心17/35過濾器數(shù)據(jù)流

節(jié)點(diǎn)流(nodestream):建立了程序和其他數(shù)據(jù)源或數(shù)據(jù)目標(biāo)的數(shù)據(jù)通道,程序通過這類流可以和流的另一端的數(shù)據(jù)源或目標(biāo)進(jìn)行數(shù)據(jù)交互,這類數(shù)據(jù)流稱為節(jié)點(diǎn)流(nodestream)。例如文件輸入流過濾器數(shù)據(jù)流(filterStream)本身并不和具體的數(shù)據(jù)源和數(shù)據(jù)目標(biāo)連接,它們連接在其他輸入輸出流上,提供各種數(shù)據(jù)處理,諸如轉(zhuǎn)換、緩存、加密、壓縮等功能,這類流稱為過濾器數(shù)據(jù)流(filterStream)。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心18/35FilterInputStreamFilterInputStream(InputStreamin)FilterOutputStreamFilterOutputStream(OutputStreamout)DataInputStreamFilterInputStream的子類DataOutputStreamFilterOutputStream的子類2024/12/24李飛——東北大學(xué)秦皇島分校計算中心19/35DataInputStream類常用方法方法功能readByte()讀取一個有符號的字節(jié)。readChar()讀取一個字符。readDouble()讀取8個字節(jié),返回double值。readFloat()讀取4個字節(jié),返回float值。readFully(byte[]b)讀取b.length個字節(jié),并存到數(shù)組b中。readInt()讀取4個字節(jié),并返回整形值。readLong()讀取8個字節(jié),并返回長整型值。readShort()讀取2個字節(jié),并返回短整型值。readUnsignedByte()讀取1個字節(jié),并返回?zé)o符號值。readBoolean()讀1個字節(jié),非0返回True,0返回False。readUnsignedShort()讀2個字節(jié),返回一個無符號的short值。readUTF()讀取1個UTF-8編碼的字符串。read(byte[]b)讀取一定數(shù)量的字節(jié),并將它們存儲到緩沖區(qū)數(shù)組b中。read(byte[]b,intoff,intlen)從包含的輸入流中將最多l(xiāng)en個字節(jié)讀入1個byte數(shù)組中。readFully(byte[]b,intoff,intlen)讀取b.len個字節(jié),并存到數(shù)組b中,第1個字節(jié)存在b[off]。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心20/35DataOutputStream類常用方法方法功能size()返回到目前為止寫入此數(shù)據(jù)輸出流的字節(jié)數(shù)。flush()清空數(shù)據(jù)輸出流。write(intb)將參數(shù)b的八個低位寫入基礎(chǔ)輸出流。writeBoolean(booleanv)將boolean值以1字節(jié)值形式寫入基礎(chǔ)輸出流。writeByte(intv)將v以1字節(jié)值形式寫出到基礎(chǔ)輸出流中。writeBytes(Strings)將字符串按字節(jié)順序?qū)懗龅交A(chǔ)輸出流中。writeChar(intv)將v以2字節(jié)值形式寫入基礎(chǔ)輸出流中。writeChars(Strings)將字符串s按字符順序?qū)懭牖A(chǔ)輸出流。writeInt(intv)將v以4字節(jié)值形式寫入基礎(chǔ)輸出流中。writeLong(longv)將v以8字節(jié)值形式寫入基礎(chǔ)輸出流中。writeShort(intv)將v以2字節(jié)值形式寫入基礎(chǔ)輸出流中。writeUTF(Stringstr)用UTF-8修改版編碼將一個字符串寫入輸出流。write(byte[]b,intoff,intlen)將byte數(shù)組中從偏移量off開始的len個字節(jié)寫入基礎(chǔ)輸出流。writeDouble(doublev)使用Double類中的doubleToLongBits方法將double參數(shù)轉(zhuǎn)換為一個long值,然后將該long值以8字節(jié)形式寫入基礎(chǔ)輸出流中。writeFloat(floatv)使用Float類中的floatToIntBits方法將float參數(shù)轉(zhuǎn)換為一個int值,然后將該int值以4字節(jié)值形式寫入基礎(chǔ)輸出流中。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心21/35例11.6保存和讀取學(xué)生檔案importjava.io.*;publicclasseg11_6{ publicstaticvoidmain(String[]args)throwsIOException{ Stringfilename="srudent.dat"; String[]students={"張三","李四"}; int[]ages={10,9}; DataOutputStreamdout=newDataOutputStream(newFileOutputStream(filename));

2024/12/24李飛——東北大學(xué)秦皇島分校計算中心22/35for(inti=0;i<2;i++){//用TAB符來分隔字段 dout.writeChars(students[i]); dout.writeChar('\t'); dout.writeInt(ages[i]); dout.writeChar('\t'); } dout.close(); DataInputStreamdin=newDataInputStream(newFileInputStream(filename));

2024/12/24李飛——東北大學(xué)秦皇島分校計算中心23/35 for(inti=0;i<2;i++){ StringBuffername=newStringBuffer(); charchread;//遇到TAB結(jié)束String字段讀取 while((chread=din.readChar())!='\t'){ name.append(chread); } intage=din.readInt(); din.readChar();//丟棄分隔符 System.out.println("學(xué)生"+name+"的年齡:"+age+"."); } din.close(); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心24/3511.4文件

創(chuàng)建文件類對象File類用于描述本地文件系統(tǒng)中的文件或目錄。通過建立File類的實例對象,我們可以方便的建立與磁盤文件或目錄的連接,進(jìn)而通過File對象獲取與之連接的磁盤文件或目錄的有關(guān)屬性并對其進(jìn)行一定的管理操作。

File類的構(gòu)造方法2024/12/24李飛——東北大學(xué)秦皇島分校計算中心25/35方法功能File(Stringpathname)根據(jù)參數(shù)pathname創(chuàng)建一個新File實例。File(Stringparent,Stringchild)根據(jù)parent路徑和child文件名創(chuàng)建一個新File實例。File(URIuri)根據(jù)URL對象創(chuàng)建File實例。路徑的表示方法通常有兩種:絕對路徑相對路徑。例:d:\myworkspace\testproject\test\myfile.dat文件的路徑寫法“d:\\myworkspace\\testproject\\test\\myfile.dat”2024/12/24李飛——東北大學(xué)秦皇島分校計算中心26/35創(chuàng)建文件對象1.路徑和文件寫在一起。Filemyfile=newFile(“d:\\myworkspace\\testproject”,“\\test\\myfile.dat”);2.路徑和文件分開。Filemyfile=newFile(“d:\\myworkspace\\testproject\\test”,“myfile.dat”);2024/12/24李飛——東北大學(xué)秦皇島分校計算中心27/35使用文件對象獲取文件和目錄屬性的方法2024/12/24李飛——東北大學(xué)秦皇島分校計算中心28/35方法功能exists()判斷文件對象表示的文件或目錄是否存在。isFile()判斷文件對象是否是一個標(biāo)準(zhǔn)文件。isDirectory()判斷文件對象是否是一個目錄。isHidden()判斷文件對象是否是一個隱藏文件。isAbsolute()判斷文件對象是否為絕對路徑名。canExecute()判斷文件對象是否可執(zhí)行。canRead()判斷文件對象表示的文件是否可讀。canWrite()判斷文件對象表示的文件可以修改。getName()獲取文件對象表示的文件或目錄的名稱。lastModified()獲取文件對象表示的文件的最后一次被修改的時間。length()獲取文件對象表示的文件的長度。getParent()獲取文件對象表示的目錄的父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回null。getParentFile()獲取文件對象表示的路徑的父目錄的抽象路徑

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論