《Java程序設(shè)計(jì)及移動(dòng)APP開(kāi)發(fā)》課件-第10章_第1頁(yè)
《Java程序設(shè)計(jì)及移動(dòng)APP開(kāi)發(fā)》課件-第10章_第2頁(yè)
《Java程序設(shè)計(jì)及移動(dòng)APP開(kāi)發(fā)》課件-第10章_第3頁(yè)
《Java程序設(shè)計(jì)及移動(dòng)APP開(kāi)發(fā)》課件-第10章_第4頁(yè)
《Java程序設(shè)計(jì)及移動(dòng)APP開(kāi)發(fā)》課件-第10章_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第10章

輸入輸出操作01020310.1流的概念10.2File類(lèi)10.3思考和練習(xí)數(shù)據(jù)流是一組有序,有起點(diǎn)和終點(diǎn)的字節(jié)集合。Java中將讀取數(shù)據(jù)的對(duì)象稱(chēng)為輸入流,寫(xiě)入數(shù)據(jù)對(duì)象稱(chēng)為輸出流。Java中流分為兩種:一種是字節(jié)流,一種是字符流。字節(jié)流是基于二進(jìn)制字節(jié)的輸入輸出,字節(jié)流中數(shù)據(jù)以8位字節(jié)為單位進(jìn)行讀寫(xiě)。InputStream類(lèi)和OutputStream類(lèi)是字節(jié)流的父類(lèi)。字符流是基于文本的輸入輸出,是由能夠閱讀的字符組成,字符流中數(shù)據(jù)以16位字符為單位進(jìn)行讀寫(xiě)。Reader類(lèi)和Writer類(lèi)是字符流類(lèi)的父類(lèi)。InputStream類(lèi)和OutputStream類(lèi)、Reader類(lèi)和Writer類(lèi)都是抽象類(lèi)。10.1.1流的含義10.1流的概念310.1流的概念字節(jié)流中InputStream類(lèi)和OutputStream類(lèi)的層級(jí)結(jié)構(gòu)如下:OutputStream輸出流ByteArrayOutputStream字節(jié)數(shù)組輸出流FileOutputStream文件輸出流FilterOutputStream過(guò)濾器輸出流BufferOutputStream帶緩沖區(qū)輸出流PrintOutputStream回退輸出流DataOutputStream數(shù)據(jù)輸出流PipedOutputStream管道輸出流ObjectOutputStream對(duì)象輸出流Reader類(lèi)和Writer類(lèi)的層級(jí)結(jié)構(gòu)如下:ReaderBufferReaderLineNumberReaderCharArrayReaderInputStreamReaderFileReaderFilterReaderPushbackReaderPipedReaderStringReader10.1流的概念510.1流的概念WriterBufferWriterCharArrayWriterOutputStreamWriterFileWriterFilterWriterPipedWriterStringWriterSystem.in:標(biāo)準(zhǔn)輸入流System.out:標(biāo)準(zhǔn)輸出流System.err:標(biāo)準(zhǔn)錯(cuò)誤輸出流10.1.3標(biāo)準(zhǔn)輸入輸出流10.1流的概念10.2File類(lèi)10.2.1File類(lèi)的構(gòu)造方法File類(lèi)與InputStream類(lèi)和OutputStream類(lèi)是一個(gè)系統(tǒng)包。File類(lèi)主要目的是命令文件、查詢(xún)文件屬性和處理文件目錄,不涉及到訪(fǎng)問(wèn)文件內(nèi)容。File類(lèi)的構(gòu)造方法有如下幾種:(1)publicFile(Stringname):定義name打開(kāi)的文件,name可以包含路徑信息。例如:Filef1=newFile("F:\\file\\123.txt");(2)publicFile(Stringpathname,Stringname):路徑和文件名分開(kāi)定義,pathname是絕對(duì)路徑名或者相對(duì)路徑名,name是文件名。例如:Filef1=newFile("F:\\file","123.txt");(3)publicFile(Filedirectory,Stringname):使用File對(duì)象directory定義的目錄來(lái)打開(kāi)name文件。例如:FileDir=newFile("F:\\file");Filef1=newFile(Dir,"123.txt");10.2File類(lèi)10.2.2FileInputStream類(lèi)和FileOutputStream類(lèi)FileInputStream類(lèi)是InputStream類(lèi)的子類(lèi),F(xiàn)ileOutputStream類(lèi)是FileOutputStream類(lèi)子類(lèi)。二者都是抽象類(lèi),不能直接定義對(duì)象,必須通過(guò)其子類(lèi)進(jìn)行實(shí)現(xiàn)。FileInputStream類(lèi)處理文件數(shù)據(jù)的輸入數(shù)據(jù)流,從文件系統(tǒng)中讀取輸入的字節(jié)數(shù)。分為三個(gè)步驟:(1)打開(kāi)輸入流(2)使用read()方法讀取數(shù)據(jù)(3)關(guān)閉數(shù)據(jù)流FileOutputStream類(lèi)處理文件數(shù)據(jù)的輸出數(shù)據(jù)流。也是分為三個(gè)步驟:(1)打開(kāi)輸出流(2)使用write()方法寫(xiě)數(shù)據(jù)(3)關(guān)閉數(shù)據(jù)流910.2File類(lèi)packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;publicclassclass1{ publicstaticvoidmain(Stringargs[]){StringFilename_in="G:\\file\\first.txt";//注意文件路徑的雙斜杠StringFilename_out="G:\\file\\second.txt";//注意文件路徑的雙斜杠try{FileInputStreamf_in=newFileInputStream(Filename_in);FileOutputStreamf_out=newFileOutputStream(Filename_out);intn=16,count;bytebuffer[]=newbyte[n];while(((count=f_in.read(buffer,0,n))!=-1)&&(n>0)){f_out.write(buffer,0,count); }System.out.println();f_in.close();f_out.close(); }catch(IOExceptionio_err){System.out.println(io_err);}catch(Exceptionerr){System.out.println(err);}} }程序運(yùn)行前,給G:\file\first.txt文件中輸入一些數(shù)據(jù),保持G:\file\second.txt文件為空。程序運(yùn)行后,G:\file\second.txt文件中的數(shù)據(jù)與G:\file\first.txt文件中的數(shù)據(jù)相同。10.2File類(lèi)10.2File類(lèi)10.2.3DataInputStream類(lèi)和DataOutputStream類(lèi)DataInputStream類(lèi)是InputStream類(lèi)的子類(lèi),DataOutputStream類(lèi)是FileOutputStream類(lèi)子類(lèi)。二者都是抽象類(lèi),不能直接定義對(duì)象,必須通過(guò)其子類(lèi)進(jìn)行實(shí)現(xiàn)。1210.2File類(lèi)DataInputStream函數(shù)列表DataInputStream(InputStreamin)finalintread(byte[]buffer,intoffset,intlength)finalintread(byte[]buffer)finalbooleanreadBoolean()finalbytereadByte()finalcharreadChar()finaldoublereadDouble()finalfloatreadFloat()finalvoidreadFully(byte[]dst)finalvoidreadFully(byte[]dst,intoffset,intbyteCount)finalintreadInt()finalStringreadLine()finallongreadLong()finalshortreadShort()finalstaticStringreadUTF(DataInputin)finalStringreadUTF()finalintreadUnsignedByte()finalintreadUnsignedShort()finalintskipBytes(intcount)1310.2File類(lèi)importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有異常拋出Stringname="李先生";intage=55;Stringemail="123456789@";Stringphone="123456789";//輸入輸出流FileOutputStreamfos=null;FileInputStreamfis=null;DataOutputStreamdos=null;DataInputStreamdis=null;try{try{//生成新文件textfos=newFileOutputStream("g:\\text.txt");dos=newDataOutputStream(fos);//將數(shù)據(jù)輸出到text中

dos.writeUTF(name);dos.writeInt(age);dos.writeUTF(email);dos.writeUTF(phone);//輸入text中的數(shù)據(jù)fis=newFileInputStream("g:\\user.txt");dis=newDataInputStream(fis);Stringm_Name=dis.readUTF();intm_Age=dis.readInt();Stringm_Eamil=dis.readUTF();Stringm_Phone=dis.readUTF();System.out.println("姓名:"+m_Name+";年齡:"+m_Age+";郵箱:"+m_Eamil+";電話(huà):"+m_Phone); }catch(FileNotFoundExceptione){e.printStackTrace(); }catch(IOExceptione){e.printStackTrace(); }10.2File類(lèi)1510.2File類(lèi)}finally{try{fos.close();fis.close();dos.close();dis.close();}catch(IOExceptione){e.printStackTrace(); }}}}程序運(yùn)行結(jié)果:姓名:李先生;年齡:55;郵箱:123456789@;電話(huà):123456789readUTF()的作用,是從輸入流中讀取UTF-8編碼的數(shù)據(jù),并以String字符串的形式返回。RandomAccessFile是用來(lái)訪(fǎng)問(wèn)那些保存數(shù)據(jù)記錄的文件,可以用seek()方法來(lái)訪(fǎng)問(wèn)記錄,并進(jìn)行讀寫(xiě)。這些記錄的大小不必相同;但是其大小和位置必須是可知的。但是該類(lèi)僅限于操作文件。10.2.4隨機(jī)訪(fǎng)問(wèn)文件10.2File類(lèi)1710.2File類(lèi)importjava.io.RandomAccessFile;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有異常拋出RandomAccessFilerf=newRandomAccessFile("g:\\file\\test.dat","rw");for(inti=0;i<10;i++){//寫(xiě)入基本類(lèi)型double數(shù)據(jù)rf.writeDouble(i*25);}rf.close();rf=newRandomAccessFile("g:\\file\\test.dat","rw");//直接將文件指針移到第5個(gè)double數(shù)據(jù)后面rf.seek(5*8);//覆蓋第6個(gè)double數(shù)據(jù)rf.writeDouble(123.5678);rf.close();rf=newRandomAccessFile("g:\\file\\test.dat","r");for(inti=0;i<10;i++){System.out.println("Value"+i+":"+rf.readDouble());}rf.close();}}10.2File類(lèi)程序運(yùn)行結(jié)果:Value0:0.0Value1:25.0Value2:50.0Value3:75.0Value4:100.0Value5:123.5678Value6:150.0Value7:175.0Value8:200.0Value9:225.0RandomAccessFile是用來(lái)訪(fǎng)問(wèn)那些保存數(shù)據(jù)記錄的文件,可以用seek()方法來(lái)訪(fǎng)問(wèn)記錄,并進(jìn)行讀寫(xiě)。這些記錄的大小不必相同;但是其大小和位置必須是可知的。但是該類(lèi)僅限于操作文件。(1)BufferedReader類(lèi)所屬類(lèi)庫(kù):java.lang.Objectjava.io.Readerjava.io.BufferedReader基本概念:publicclassBufferedReaderextendsReader從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。可以指定緩沖區(qū)的大小,或者可使用默認(rèn)的大小。大多數(shù)情況下,默認(rèn)值足夠大。10.2.5Read類(lèi)和Write類(lèi)10.2File類(lèi)2010.2File類(lèi)importjava.io.*;classBufferedReaderDemo{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));System.out.print("請(qǐng)輸入一系列文字,可包括空格:");Stringtext=bufferedReader.readLine();System.out.println("請(qǐng)輸入文字:"+text);}}throwsIOException拋出異常,InputStreamReader是字節(jié)流通向字符流的橋梁。程序運(yùn)行結(jié)果(斜體字是自己輸入):請(qǐng)輸入一系列文字,可包括空格:這是BufferedReader程序測(cè)試請(qǐng)輸入文字:這是BufferedReader程序測(cè)試10.2File類(lèi)(2)InputStreamReader類(lèi)InputStreamReader將字節(jié)流轉(zhuǎn)換為字符流。是字節(jié)流通向字符流的橋梁。如果不指定字符集編碼,該解碼過(guò)程將使用平臺(tái)默認(rèn)的字符編碼,如:GBK。

構(gòu)造方法:

InputStreamReaderisr=newInputStreamReader(InputStreamin);//構(gòu)造一個(gè)默認(rèn)編碼集的InputStreamReader類(lèi)InputStreamReaderisr=newInputStreamReader(InputStreamin,StringcharsetName);//構(gòu)造一個(gè)指定編碼集的InputStreamReader類(lèi)。主要方法:intread();//讀取單個(gè)字符。intread(char[]cbuf);//將讀取到的字符存到數(shù)組中。返回讀取的字符數(shù)。2210.2File類(lèi)importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有異常拋出 /***沒(méi)有緩沖區(qū),只能使用read()方法。*///讀取字節(jié)流//InputStreamin=System.in;//讀取鍵盤(pán)的輸入。InputStreamin=newFileInputStream("g:\\file\\first.txt");//讀取文件的數(shù)據(jù)。//將字節(jié)流向字符流的轉(zhuǎn)換。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,//可以提前從底層流讀取更多的字節(jié).InputStreamReaderisr=newInputStreamReader(in);//讀取//綜合到一句。//InputStreamReaderisr=newInputStreamReader(//newFileInputStream("g:\\file\\first.txt"));char[]cha=newchar[1024];intlen=isr.read(cha);System.out.println(newString(cha,0,len));isr.close();}}10.2File類(lèi)程序運(yùn)行結(jié)果序號(hào)

名稱(chēng)

型號(hào)

價(jià)格1 三星手機(jī) SA1203 3000.002 華為手機(jī) HW3001 5000.00蘋(píng)果手機(jī) A2503 4500.00當(dāng)然,輸出就是g:\file\first.txt文件中的內(nèi)容。2410.2File類(lèi)(3)InputStreamReader、BufferedReader真實(shí)案例(非編碼集)importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有異常拋出try{//讀取文件,并且以u(píng)tf-8的形式寫(xiě)出去BufferedReaderbufread;InputStreamReaderinputSteam=newInputStreamReader( ResourceHelper.getResourceInputStream("g:\\file\\first.txt"));Stringread;bufread=newBufferedReader(inputSteam);while((read=bufread.readLine())!=null){System.out.println(read);}bufread.close();}catch(FileNotFoundExceptionex){ex.printStackTrace();}catch(IOExceptionex){ex.printStackTrace();}}}10.2File類(lèi)classResourceHelper{/***@param

resourceName*@return*@return*/staticBufferedInputStream

getResourceInputStream(StringresourceName){try{returnnewBufferedInputStream(newFileInputStream(resourceName));}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblock

e.printStackTrace();}returnnull;}}程序運(yùn)行結(jié)果序號(hào)

名稱(chēng)

型號(hào)

價(jià)格1 三星手機(jī) SA1203 3000.002 華為手機(jī) HW3001 5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論