Java面向?qū)ο蟪绦蛟O(shè)計第11章-輸入流與輸出流1_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計第11章-輸入流與輸出流1_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計第11章-輸入流與輸出流1_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計第11章-輸入流與輸出流1_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計第11章-輸入流與輸出流1_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JavaIO主講:李宏利導(dǎo)讀主要內(nèi)容File類文件字節(jié)輸入、輸出流文件字符輸入、輸出流緩沖流隨機流數(shù)組流數(shù)據(jù)流對象流序列化與對象可隆使用Scanner解析文件文件鎖概述輸入、輸出流提供一條通道程序,可以使用這條通道讀取源中的數(shù)據(jù)或把數(shù)據(jù)傳送到目的地。把輸入流的指向稱作源,程序從指向源的輸入流中讀取源中的數(shù)據(jù);而輸出流的指向是數(shù)據(jù)要去的一個目的地,程序通過向輸出流中寫入數(shù)據(jù)把數(shù)據(jù)傳送到目的地。1File類

File對象主要用來獲取文件本身的一些信息,不涉及對文件的讀寫操作。創(chuàng)建一個File對象的構(gòu)造方法有3個:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);

1.1文件的屬性File類的下列方法獲取文件本身的一些信息。

publicStringgetName()

獲取文件的名字。publicbooleancanRead()

判斷文件是否是可讀的。publicbooleancanWrite()

判斷文件是否可被寫入。publicbooleanexits()

判斷文件是否存在。publiclonglength()

獲取文件的長度(單位是字節(jié))。publicStringgetAbsolutePath()獲取文件的絕對路徑。publicStringgetParent()獲取文件的父目錄。publicbooleanisFile()

判斷文件是否是一個普通文件,而不是目錄。publicbooleanisDirectroy()

判斷文件是否是一個目錄。publicbooleanisHidden()

判斷文件是否是隱藏文件。publiclonglastModified()

獲取文件最后修改的時間。例子1(例子1使用上述的一些方法,獲取某些文件的信息)1.2目錄1.創(chuàng)建目錄publicbooleanmkdir()2.列出目錄中的文件

publicString[]list()

用字符串形式返回目錄下的全部文件。publicFile[]listFiles()

用File對象形式返回目錄下的全部文件。publicString[]list(FilenameFilterobj)

用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilterobj)

用File對象形式返回目錄下的指定類型所有文件。上述兩方法的參數(shù)FilenameFilter是一個接口,該接口有一個方法:publicbooleanaccept(Filedir,Stringname);例子2(Example10_2.java,FileAccept.java),例子2列出當(dāng)前目錄(應(yīng)用程序所在的目錄)下全部java文件的名字)1.3文件的創(chuàng)建與刪除當(dāng)使用File類創(chuàng)建一個文件對象后,例如Filefile=newFile("c:\\myletter","letter.txt");

如果c:\myletter目錄中沒有名字為letter.txt文件,文件對象file調(diào)用方法publicbooleancreateNewFile();可以在c:\myletter目錄中建立一個名字為letter.txt的文件。文件對象調(diào)用方法publicbooleandelete()可以刪除當(dāng)前文件,例如:file.delete();1.4運行可執(zhí)行文件用Runtime類聲明一個對象(Runtime類在java.lang包)

Runtimeec;然后使用該類的getRuntime()靜態(tài)方法創(chuàng)建這個對象:

ec=Runtime.getRuntime();

ec可以調(diào)用

exec(Stringcommand)

方法打開本地機的可執(zhí)行文件或執(zhí)行一個操作。

例子3(例子3中,Runtime對象打開windows平臺上的記事本程序和瀏覽器)2文件字節(jié)輸入流java.io包提供了大量的流類,Java把InputStream抽象類的子類創(chuàng)建的流對象稱作字節(jié)輸入流、OutputStream抽象類的子類創(chuàng)建的流對象稱作字節(jié)輸出流,Java把Reader抽象類的子類創(chuàng)建的流對象稱作字符輸入流、Writer抽象類的子類創(chuàng)建的流對象稱作字符輸出流。針對不同的源或目的地,java.io包為程序提供了相應(yīng)的輸入流或輸出流,這些輸入、輸出流絕大部分都是InputStream、OutputStream、Reader或Writer的子類。使用輸入流通常包括4個基本步驟:(1)設(shè)定輸入流的源(2)創(chuàng)建指向源的輸入流(3)讓輸入流讀取源中的數(shù)據(jù)(4)關(guān)閉輸入流。(1)構(gòu)造方法

使用FileInputStream類的下列構(gòu)造方法創(chuàng)建指向文件的輸入流。FileInputStream(Stringname);FileInputStream(Filefile);參數(shù)name和file指定的文件稱為輸入流的源。

2文件字節(jié)輸入流(2)使用輸入流讀取字節(jié)文件字節(jié)流可以調(diào)用從父類繼承的read方法順序地讀取文件,只要不關(guān)閉流,每次調(diào)用read方法就順序地讀取文件中的其余內(nèi)容,直到文件的末尾或文件字節(jié)輸入流被關(guān)閉?!鬷ntread()

讀取單個字節(jié)的數(shù)據(jù),返回字節(jié)值(0~255整數(shù)),如果未讀出字節(jié)就返回-1?!鬷ntread(byteb[])

讀取b.length個字節(jié)到字節(jié)數(shù)組b中,返回實際讀取的字節(jié)數(shù)。如果到達文件的末尾,則返回-1?!鬷ntread(byteb[],intoff,intlen)

讀取len個字節(jié)到字節(jié)數(shù)組b中,并返回實際讀取的字節(jié)數(shù)目。如果到達文件的末尾,則返回-1,參數(shù)off指定從字節(jié)數(shù)組的某個位置開始存放讀取的數(shù)據(jù)。例子4使用文件字節(jié)流讀取文件的內(nèi)容。2文件字節(jié)輸入流3文件字節(jié)輸出流使用輸出流通常包括4個基本步驟:給出輸出流的目的地(創(chuàng)建指向目的地的輸出流讓輸出流把數(shù)據(jù)寫入到目的地關(guān)閉輸出流。(1)構(gòu)造方法

使用FileOutputStream類的下列具有刷新功能的構(gòu)造方法創(chuàng)建指向文件的輸出流。FileOutputStream(Stringname);FileOutputStream(Filefile);參數(shù)name和file指定的文件稱為輸出流的目的地

輸出流的wirie方法以字節(jié)單位向目的地寫數(shù)據(jù)。voidwrite(intn)

向目的地寫入單個字節(jié)。voidwrite(byteb[])

向目的地寫入一個字節(jié)數(shù)組。voidwrite(byteb[],intoff,intlen)

從字節(jié)數(shù)組中偏移量off處取len個字節(jié)寫到目的地。FileOutputStream流順序地寫文件,只要不關(guān)閉流,每次調(diào)用write方法就順序地向目的地寫入內(nèi)容,直到流被關(guān)閉。

(2)使用輸出流寫字節(jié)

例子5使用文件字節(jié)輸出流寫文件a.txt。

例子5首先使用具有刷新功能的構(gòu)造方法創(chuàng)建指向文件a.txt的輸出流、并向a.txt文件寫入“新年快樂”,然后再選擇使用不刷新文件的構(gòu)造方法指向a.txt,并向文件寫入(即尾加)“HappyNewYear”(3)關(guān)閉流

通過調(diào)用close()方法,可以保證操作系統(tǒng)把流緩沖區(qū)的內(nèi)容寫到它的目的地,即關(guān)閉輸出流可以把該流所用的緩沖區(qū)的內(nèi)容沖洗掉(通常沖洗到磁盤文件上)。3文件字節(jié)輸出流4文件字符輸入、輸出流Reader類提供的read方法以字符為單位順序地讀取源中的數(shù)據(jù)。intread():intread(charb[]):intread(charb[],intoff,intlen):voidclose():longskip(longnumBytes):Writer流以字符為單位順序地寫文件,每次調(diào)用write方法就順序地向目的地寫入內(nèi)容。Writer類有如下常用的方法。

voidwrite(intn):

向輸出流寫入一個字符。

voidwrite(byteb[]):

向輸出流寫入一個字符數(shù)組。

voidwrite(byteb[],intoff,intlength):從給定字符數(shù)組中起始于偏移量off處取len個字符寫到輸出流。

voidclose():

關(guān)閉輸出流。

例子6

使用文件字符輸入、輸出流將文件a.txt的內(nèi)容尾加到文件b.txt中。5緩沖流BufferedReader和BufferedWriter類創(chuàng)建的對象稱作緩沖輸入、輸出流。二者的源和目的地必須是字符輸入流和字符輸出流。構(gòu)造方法:BufferedReader(Readerin);BufferedWriter(Writerout);BufferedReader和BufferedWriter類讀寫文件的方法:readLine()

讀取文本行write(Strings,intoff,intlen)

把字符串s寫到文件中

newLine();

向文件寫入一個回行符由英語句子構(gòu)成的文件english.txt(每句占一行):

Thearrowmissedthetarget.Theyrejectedtheuniondemand.Wheredoesthisroadgoto?

例子7按行讀取english.txt

,并在該行的后面尾加上該英語句子中含有的單詞數(shù)目,然后再將該行寫入到一個名字為englishCount.txt的文件中。程序運行效果如圖10.5。5緩沖流6隨機流使用RandomAccessFile類來創(chuàng)建一個隨機訪問文件流。RandomAccessFile類創(chuàng)建的流的指向既可以作為源也可以作為目的地。

構(gòu)造方法:RandomAccessFile(Stringname,Stringmode);RandomAccessFile(Filefile,Stringmode);

◆相關(guān)方法:seek(longa)

定位RandomAccessFile流的讀寫位置

getFilePointer()

獲取流的當(dāng)前讀寫位置

例子8(把幾個int型整數(shù)寫入到一個名字為tom.dat文件)◆

readLine()方法在讀取含有非ASCII字符的文件時出現(xiàn)“亂碼”現(xiàn)象的方法:1.讀取Stringstr=in.readLine();2.用“iso-8859-1”重新編碼byteb[]=str.getBytes("iso-8859-1");3.使用當(dāng)前機器的默認編碼將字節(jié)數(shù)組轉(zhuǎn)化為字符串Stringcontent=newString(b);例子9(使用readLine()讀取文件)

7數(shù)組流字節(jié)數(shù)組流字節(jié)數(shù)組輸入流ByteArrayInputStream和字節(jié)數(shù)組輸出流ByteArrayOutputStream分別使用字節(jié)數(shù)組作為流的源和目標(biāo)。◆

ByteArrayInputStream構(gòu)造方法及常用方法ByteArrayInputStream(byte[]buf);ByteArrayInputStream(byte[]buf,intoffset,intlength);

publicintread();順序地從源中讀出一個字節(jié)

publicintread(byte[]b,intoff,intlen);順序地從源中讀出參數(shù)len指定的字節(jié)數(shù)

ByteArrayOutputStream流構(gòu)造方法及常用方法ByteArrayOutputStream();ByteArrayOutputStream(intsize);publicvoidwrite(intb);

順序地向緩沖區(qū)寫入一個字節(jié)

publicvoidwrite(byte[]b,intoff,intlen);

將參數(shù)b中指定的len個字節(jié)順序地寫入緩沖區(qū)publicbyte[]toByteArray();

返回輸出流寫入到緩沖區(qū)的全部字節(jié)

字符數(shù)組

CharArrayReader和CharArrayWriter類是字符數(shù)組流,使用字符數(shù)組作為流的源和目標(biāo)。例子10向內(nèi)存(輸出流的緩沖區(qū))寫入字符串。8數(shù)據(jù)流DataInputStream和DataOutputStream類創(chuàng)建的對象稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流。構(gòu)造方法:DataInputStream(InputStreamin)創(chuàng)建的數(shù)據(jù)輸入流指向一個由參數(shù)in指定的底層輸入流DataOutputStream(OutnputStreamout)創(chuàng)建的數(shù)據(jù)輸出流指向一個由參數(shù)out指定的底層輸出流例子11寫幾個Java類型的數(shù)據(jù)到一個文件。例子12將字符串加密后寫入文件,如圖10.6所示。9對象流ObjectInputStream和ObjectOutputStream類創(chuàng)建的對象稱為對象輸入流和對象輸出流。它的構(gòu)造方法是:ObjectInputStream(InputStreamin)ObjectOutputStream(OutputStreamout)相關(guān)方法:writeObject(Objectobj)將一個對象obj寫入到一個文件

readObject()讀取一個對象到程序中所謂序列化:一個類如果實現(xiàn)了Serializable接口,那么這個類創(chuàng)建的對象就是所謂序列化的對象。

例子13

Example10_13.java,TV.java,使用對象流讀寫TV類創(chuàng)建的對象,效果如圖10.7所示。10序列化與對象克隆如果一個“復(fù)制品”實體的變化不會引起原對象實體發(fā)生變化,反之亦然。這樣的復(fù)制品稱為原對象的一個克隆對象或簡稱克隆。一個對象調(diào)用clone()方法就可以獲取該對象的克隆對象。對象輸入流通過對象的序列化信息來得到當(dāng)前對象的一個克隆。

例子14(單擊“寫出對象”按扭將標(biāo)簽寫入到內(nèi)存,單擊“讀入對象”按扭讀入標(biāo)簽的克隆對象)11使用Scanner解析文件使用Scanner類和正則表達式來解析文件。使用默認分隔標(biāo)記解析文件創(chuàng)建Scanner對象,并指向要解析的文件,例如:

Filefile=newFile("hello.java");Scannersc=newScanner(file);

sc將空白作為分隔標(biāo)記

使用正則表達式作為分隔標(biāo)記解析文件:創(chuàng)建Scanner對象,指向要解析的文件,并使用useDelimiter方法指定正則表達式作為分隔標(biāo)記,例如:相關(guān)方法next()依次返回file中的單詞

hasNext()判斷file最后一個單詞是否已被next()方法返回.

例題15解析文件cost.txt中的全部消費Filefile=newFile("hello.java");Scannersc=newScanner(file);sc.useDelimiter(正則表達式);

sc將正則表達式作為分隔標(biāo)記相關(guān)方法next()

依次返回file中的單詞hasNext()判斷file最后一個單詞是否已被next()方法返回

例子16解析student.txt文件中的學(xué)生成績12文件對話框構(gòu)造方法JFileChooser()創(chuàng)建初始不可見的有模式的文件對話框。然后文件對話框調(diào)用下述2個方法:showSaveDialog(Componenta);showOpenDialog(Componenta);都可以使得對話框可見,只是呈現(xiàn)的外觀有所不同,showSaveDialog方法提供保存文件的界面,showOpenDialog方法提供打開文件的界面。上述兩個方法中的參數(shù)a指定對話框可見時的位置,當(dāng)a是null時,文件對話框出現(xiàn)在屏幕的中央;如果組件a不空,文件對話框在組件a的正前面居中顯示。例子17

Example10_17java,WindowReader.java

,使用文件對話框打開和保存文件13帶進度條的輸入流

如果讀取文件時希望看見文件的讀取進度可以使用javax.swing包提供的輸入流類:ProgressMonitorInputStream。它的構(gòu)造方法是:ProgressMonitorInputStream(Conmponentc,Strings,InputStream);

例子1814文件鎖FileLock、FileChannel類處理Java提供的文件鎖功能。它們分別在java.nio和java.nio.channels包中。輸入、輸出流讀寫文件時可以使用文件鎖。

RondomAccessFile創(chuàng)建的流在讀寫文件時使用文件鎖的步驟如下:先使用RondomAccessFile流建立指向文件的流對象,該對象的讀寫屬性必須是rw,例如:RandomAccessFileinput=newRandomAccessFile("Example.java","rw");input流調(diào)用方法getChannel()獲得一個連接到地層文件的FileChannel對象(信道),例如FileChannelchannel=input.getChannel();

信道調(diào)用tryLock()或lock()方法獲得一個FileLock(文件鎖)對象,這一過程也

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論