




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第14章實現(xiàn)流主講:XXX復(fù)習(xí)提問1、什么是監(jiān)聽器?有什么作用?2、什么是適配器?有什么作用?3、監(jiān)聽器和適配器有什么不同?4、圖形界面中常用組件有哪些?本章提要主要知識點:流的分類;主要流類的功能與用法;文件流的處理
學(xué)習(xí)目標(biāo):熟悉流的基本功能,掌握主要流類的用法,能夠運用流進(jìn)行輸入輸出操作和文件的處理。14.1識別流的類型JAVA程序的輸入輸出功能通過流Stream實現(xiàn)的。流是指一組有順序的、有起點和終點的字節(jié)結(jié)合,如文件、網(wǎng)絡(luò)。java.io系統(tǒng)包提供了一套完整的流類,能夠進(jìn)行基本的IO操作和復(fù)雜的文件處理以及網(wǎng)絡(luò)功能。Java中的流按照處理數(shù)據(jù)的單位可以分為兩種:字節(jié)流和字符流,分別用4個抽象類來表示:InputStream、OutputStream、Reader、Writer,其中InputStream和Reader用于讀操作,OutputStream
和Writer用于寫操作,Java中的許多其它流類都是它們的子類。如果需要進(jìn)行流操作,應(yīng)在程序首部加上語句:importjava.io.*;14.1識別流的類型按照對流中數(shù)據(jù)的處理方式,流又可以分為文本流和二進(jìn)制流,文本流是一個字符序列,能夠按照需要進(jìn)行某些字符的轉(zhuǎn)換,被讀寫的字符和外部設(shè)備之間不存在一一對應(yīng)的關(guān)系,被讀寫的字符個數(shù)與外部設(shè)備中的字符個數(shù)不一定相等,如標(biāo)準(zhǔn)輸出流System.out就是文本流,不同類型的數(shù)據(jù)經(jīng)過轉(zhuǎn)換后輸出到標(biāo)準(zhǔn)輸出設(shè)備(顯示器)。而二進(jìn)制流則在讀寫過程中不要轉(zhuǎn)換,外部設(shè)備中的字節(jié)或字符與被讀寫的字節(jié)或字符完全對應(yīng)。14.1識別流的類型文件不僅表示磁盤文件,也包括設(shè)備,如鍵盤、顯示器、打印機(jī),對它們的操作也是通過流完成的,通過建立流與特定文件的聯(lián)系,可以從文件中讀出字節(jié),保存到數(shù)組或者使用輸出流寫入文件,外部設(shè)備中的字節(jié)或字符與被讀寫的字節(jié)或字符完全對應(yīng)。
14.1識別流的類型14.1.1InputStream類
InputStream是基本的輸入流類,是一個抽象類,它定義了輸入流類共同的特性,該類中的所有方法在遇到錯誤時都會引發(fā)IOExcetion異常,所以一般在定義方法時都會在后面加上throwsIOExcetion子句。
InputStream類是一個抽象類,不能直接實例化,程序中使用的是它的子類對象,但有些子類不支持其中的一些方法,如skip,mark,reset。常用方法有:14.1識別流的類型intread()
//返回下一個輸入字節(jié)的整形表示,-1表示遇到流的末尾(結(jié)束)int
read(byte[]b)//讀入b.length個字節(jié)到數(shù)組b并返回實際讀入的字節(jié)數(shù)int
read(byte[]b,int
off,int
len)//讀入流中的數(shù)據(jù)到數(shù)組b,保存在off開始的長度為len的數(shù)組元素中l(wèi)ongskip(longn)//跳過輸入流上的n個字節(jié)并返回實際跳過的字節(jié)數(shù)int
avaiable()//返回當(dāng)前輸入流中可讀的字節(jié)數(shù)voidmark(int
readlimit)//在輸入流的當(dāng)前放置一個標(biāo)志,表示允許最多讀入readlimit個字節(jié)voidreset()//把輸入指針返回以前所做的標(biāo)志處(復(fù)位)boolean
markSupported()是否支持mark/reset操作voidclose()//關(guān)閉流操作,釋放相應(yīng)資源14.1識別流的類型14.1.2OutputStream類
OutputStream是基本的輸出流類,與InputStream對應(yīng),它定義了輸出流類共同的特性,定義和使用與InputStream類似,但它的所有方法都是void返回類型。常用方法:voidwrited(intb)//將一個字節(jié)寫入流,也可以使用表達(dá)式voidwrited(byte[]b)//將一個字節(jié)數(shù)組寫入輸出流voidwrited(byte[]b,int
off,int
len)//將字節(jié)數(shù)組的從off開始的len個字節(jié)寫入輸出流voidflush()//徹底完成輸出并清空緩沖區(qū)voidclose()//關(guān)閉輸出流,釋放資源java.util.Scanner類Scanner使用分隔符模式將其輸入分解為標(biāo)記,默認(rèn)情況下該分隔符模式與空白匹配。然后可以使用不同的next方法將得到的標(biāo)記轉(zhuǎn)換為不同類型的值。例如,以下代碼使用戶能夠從System.in
中讀取一個數(shù):Scannersc=newScanner(System.in);
inti=sc.nextInt();
以下代碼使long類型可以通過myNumbers
文件中的項分配:Scannersc=newScanner(new
File("myNumbers"));while(sc.hasNextLong()){longaLong=sc.nextLong();}java.util.Scanner類掃描器還可以使用不同于空白的分隔符。下面是從一個字符串讀取若干項的例子:Stringinput="1fish2fishredfishbluefish";Scanners=newScanner(input).useDelimiter("\\s*fish\\s*");System.out.println(s.nextInt());System.out.println(s.nextInt());System.out.println(s.next());System.out.println(s.next());
s.close();輸出為:12redblue
java.util.Scanner類構(gòu)造方法
:Scanner(Filesource)//構(gòu)造一個新的Scanner,它生成的值是從指定文件掃描的。Scanner(Filesource,StringcharsetName)//構(gòu)造一個新的Scanner,它生成的值是從指定文件掃描的。Scanner(InputStreamsource)//構(gòu)造一個新的Scanner,它生成的值是從指定的輸入流掃描的。Scanner(InputStreamsource,StringcharsetName)//構(gòu)造一個新的Scanner,它生成的值是從指定的輸入流掃描的Scanner(Stringsource)//構(gòu)造一個新的Scanner,它生成的值是從指定字符串掃描的。
java.util.Scanner類主要方法
:voidclose()//關(guān)閉此掃描器boolean
hasNext()//如果此掃描器的輸入中有另一個標(biāo)記,則返回true。boolean
hasNextInt()//如果通過使用nextInt()方法,此掃描器輸入信息中的下一個標(biāo)記可以解釋為默認(rèn)基數(shù)中的一個int
值,則返回true。boolean
hasNextLine()//如果在此掃描器的輸入中存在另一行,則返回true。int
nextInt()//將輸入信息的下一個標(biāo)記掃描為一個int。boolean
nextBoolean()//掃描解釋為一個布爾值的輸入標(biāo)記并返回該值。流輸入輸出應(yīng)用舉例例1:輸入3個學(xué)生的學(xué)號、姓名、成績,求出總分和平均分.importjava.util.Scanner;publicclassScoreSum{publicstaticvoidmain(String[]args){
intno1,no2,no3; Stringname1,name2,name3; floatscore1,score2,score3; floattotal,average; Scannerscan=newScanner(System.in);
System.out.print("請輸入第1個學(xué)生的學(xué)號、姓名、成績:"); no1=scan.nextInt(); name1=scan.next(); score1=scan.nextFloat();流輸入輸出應(yīng)用舉例
System.out.print("請輸入第2個學(xué)生的學(xué)號、姓名、成績:"); no2=scan.nextInt();name2=scan.next(); score2=scan.nextFloat();
System.out.print("請輸入第3個學(xué)生的學(xué)號、姓名、成績:"); no3=scan.nextInt();name3=scan.next(); score3=scan.nextFloat(); total=score1+score2+score3; average=total/3;
System.out.println("學(xué)生成績表");
System.out.println("====================");
System.out.println("學(xué)號姓名成績"); System.out.println(no1+""+name1+""+score1); System.out.println(no2+""+name2+""+score2); System.out.println(no3+""+name3+""+score3);
System.out.println("====================");
System.out.println("學(xué)生成績總分:"+total+",平均分:"+average); }}14.1識別流的類型14.1.3PrintStream類打印流,用于打印輸出,常用的標(biāo)準(zhǔn)打印輸出對象System.out就是PrintStream類的實例對象。PrintStream類可以使用OutputStream類定義的所有方法,還包括print和println方法,能夠?qū)⒉煌愋偷臄?shù)據(jù)轉(zhuǎn)換成字符串輸出,println方法在輸出當(dāng)前內(nèi)容后會換行,而print方法不會換行。構(gòu)造方法是:printStream(OutputStreamout)printStream(OutputStream
out,boolean
autoflush)//輸出后要不要自動清空緩沖區(qū)printStream(OutputStream
out,boolean
autoflush,Stringencoding)//Autoflush表示遇到回行符\n是否需要清空緩沖區(qū),Encoding表示編碼方式14.1識別流的類型主要方法:voidwrited(intb)voidwrited(byte[]b)voidwrited(byte[]b,int
off,int
len)voidflush()voidclose()voidprint(Object
obj)或voidprintln(Object
obj)voidprint(Strings)或voidprintln(Strings)voidprint(char
ch[])或voidprintln(char
ch[])voidprint(charc)或voidprintln(charc)voidprint(inti)或voidprintln(inti)voidprint(longl)或voidprintln(longl)voidprint(floatf)或voidprintln(floatf)voidprint(doubled)或voidprintln(doubled)voidprint(booleanb)或voidprintln(booleanb)voidprintln()//僅僅輸出一個換行符
14.1.5InputStreamReader和OutputStreamWriter類InputStreamReader類和OutputStreamWriter類是Reader和Writer的子類,提供從字節(jié)流到字符流的轉(zhuǎn)換,InputStream類和OutputStream類處理的是字節(jié)流,在讀寫雙字節(jié)的中文信息時可能出現(xiàn)錯誤,利用Reader和Writer類處理就能夠解決這個問題。14.1.5InputStreamReader和OutputStreamWriter類構(gòu)造方法:InputStreamReader(InputStreamin)InputStreamReader(InputStream
in,String
charsetName)InputStreamReader(InputStream
in,Charset
cs)InputStreamReader(InputStream
in,CharsetDecoder
dec)CharsetName是字符集名,Charset是字符集,CharsetDecoder是字符編碼集。InputStreamReader和OutputStreamWriter類提供的方法與InputStream以及OutputStream相似,只是以字符為單位進(jìn)行讀寫操作。14.1.6BufferInputStream類和BufferOutputWriter類BufferInputStream類和BufferOutputWriter類允許I/O一次讀取多個字節(jié),提高系統(tǒng)性能,可以使用skip/reset/mark方法
1、BufferInputStream類可以對任何InputStream進(jìn)行帶緩沖區(qū)的封裝2、BufferedOutputStream類向BufferedOutputStream輸出和向OutputStream輸出完全相同,只不過BufferedOutputStream中有一個強(qiáng)制輸出緩沖區(qū)數(shù)據(jù)的方法flush
14.1.6BufferInputStream類和BufferOutputWriter類BufferInputStream類的構(gòu)造方法是:BufferInputStream(InputStreamin)//構(gòu)造一個帶32B緩沖區(qū)的緩沖流。BufferInputStream(InputStream
in,intsize)//構(gòu)造一個指定大小緩沖區(qū)的緩沖流。
14.1.6BufferInputStream類和BufferOutputWriter類2、BufferedOutputStream類向BufferedOutputStream輸出和向OutputStream輸出完全相同,只不過BufferedOutputStream中有一個強(qiáng)制輸出緩沖區(qū)數(shù)據(jù)的方法flush,構(gòu)造方法是:BufferedOutputStream(OutputStreamin)//構(gòu)造一個帶32B緩沖區(qū)的緩沖流。BufferedOutputStream(OutputStream
in,intsize)//構(gòu)造一個指定大小緩沖區(qū)的緩沖流。流輸入輸出應(yīng)用舉例例2:將鍵盤輸入的信息顯示到屏幕上。importjava.io.*;publicclassCharInput{publicstaticvoidmain(String
args[])throwsIOException{Strings;
InputStreamReader
ir;
BufferedReaderin;//從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取。
ir=newInputStreamReader(System.in);in=newBufferedReader(ir);//可以與上一句合并為一句
while((s=in.readLine())!=null){
System.out.println("Read:"+s);}}}流輸入輸出應(yīng)用舉例例3:將鍵盤輸入10個數(shù),求平均值。importjava.io.*; publicclassAverage{publicstaticvoidmain(String
args[]){inti,n=10,s=0;floataver;try{for(i=1;i<=n;i++){BufferedReader
br=newBufferedReader(new
InputStreamReader(System.in));s=s+Integer.parseInt(br.readLine());}}catch(IOExceptione){}aver=s/10f;System.out.println("這10個數(shù)的平均值是:"+aver);}}14.2應(yīng)用文件流14.2.1File類
File類是IO包中唯一能夠代表磁盤文件本身的對象,
File類定義了一些與平臺無關(guān)的方法進(jìn)行文件操作,如建立、刪除、查詢、重命名等。目錄也是文件,功能更多,可列表,用\(在Windows環(huán)境下)或/(在UNIX及Linux環(huán)境下)分隔目錄名。對文件進(jìn)行處理后,可利用資源管理器查看。如:FilemyFile=newFile("myfilename");14.2應(yīng)用文件流1、File類的常用方法StringgetName()//獲取文件名StringgetPath()//獲取文件路徑StringgetAbsolutePath()//獲取文件絕對路徑StringgetParent()//獲取父目錄名稱BooleanrenameTo(File
newName)//改名是否成功Booleanexists()//文件是否存在BooleancanWrite()//文件是否可寫B(tài)ooleancanRead()//文件是否可讀BooleanisFile()//是否是文件BooleanisDirectory()//是否是目錄BooleanisAbsolute()//是否是絕對路徑longlastModified()//文件最后修改的時間longlength()//文件長度Booleandelete()//刪除文件
14.2應(yīng)用文件流2、目錄操作方法boolean
mkdir()//建立目錄boolean
mkdirs()//可建立多個層次的目錄String[]list()//列出符合條件的文件名3、應(yīng)用舉例例4:判斷C盤根目錄下指定的文件1.txt是否存在,若存在顯示其相關(guān)信息,否則顯示文件不存在的提示。
14.2應(yīng)用文件流14.2.2FileInputStream類和FileOutputStream類文件輸入輸出類,用于完成磁盤文件的讀寫操作。在創(chuàng)建一個FileInputStream對象時通過構(gòu)造函數(shù)指定文件名和路徑,而創(chuàng)建一個FileOutputStream對象時,如果文件存在,則覆蓋它。常用構(gòu)造方法:FileInputStream(String
fileName)FileInputStream(Filefile)例:下面兩種方法均可建立文件對象。方法一:FileInputStream
inOne=newFileInputStream("helloworld.txt");方法二:Filef=newFile("helloworld.txt");FileInputStream
inTwo=newFileInputStream(f);14.2應(yīng)用文件流FileOutputStream類的構(gòu)造方法和FileInputStream類相似,主要有2個:FileOutputStream(String
file
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 惠子相梁課件
- 情景攝影課件
- 2025年秋季部編版初中數(shù)學(xué)教學(xué)設(shè)計八年級上冊第1課時 等邊三角形的性質(zhì)和判定
- 餐飲促銷主題策劃的方案
- 進(jìn)社區(qū)志愿者活動策劃方案
- 七中語文試題及答案
- 思政概論試題及答案
- 美術(shù)燈光面試題及答案
- 詞匯學(xué)測試題及答案
- 精算考試面試題及答案
- 2025年貴州省存量房買賣合同
- 2024-2025學(xué)年湖北省武漢市高一上學(xué)期1月期末考試英語試題(解析版)
- 復(fù)印打字服務(wù)協(xié)議書
- 2025 年全國保密教育線上培訓(xùn)考試測試卷及答案
- 村醫(yī)依法執(zhí)業(yè)培訓(xùn)
- 保育師項目附件
- 電信裝維人員服務(wù)規(guī)范
- 2025年安徽宣城市宣州區(qū)國有資本運營集團(tuán)招聘筆試參考題庫附帶答案詳解
- 2025年教師招聘考試教育法律法規(guī)高分題庫及答案(共101題)
- 電廠水處理值班員(第二版)中級工
- 加油站氣象災(zāi)害防御制度
評論
0/150
提交評論