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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

publicStringgetName()

獲取文件的名字。publicbooleancanRead()

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

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

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

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

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

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

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

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

publicString[]list()

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

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

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

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

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

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

ec=Runtime.getRuntime();

ec可以調(diào)用

exec(Stringcommand)

方法打開(kāi)本地機(jī)的可執(zhí)行文件或執(zhí)行一個(gè)操作。

例子3(例子3中,Runtime對(duì)象打開(kāi)windows平臺(tái)上的記事本程序和瀏覽器)2文件字節(jié)輸入流java.io包提供了大量的流類,Java把InputStream抽象類的子類創(chuàng)建的流對(duì)象稱作字節(jié)輸入流、OutputStream抽象類的子類創(chuàng)建的流對(duì)象稱作字節(jié)輸出流,Java把Reader抽象類的子類創(chuàng)建的流對(duì)象稱作字符輸入流、Writer抽象類的子類創(chuàng)建的流對(duì)象稱作字符輸出流。針對(duì)不同的源或目的地,java.io包為程序提供了相應(yīng)的輸入流或輸出流,這些輸入、輸出流絕大部分都是InputStream、OutputStream、Reader或Writer的子類。使用輸入流通常包括4個(gè)基本步驟:(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()

讀取單個(gè)字節(jié)的數(shù)據(jù),返回字節(jié)值(0~255整數(shù)),如果未讀出字節(jié)就返回-1。◆intread(byteb[])

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

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

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

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

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

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

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

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

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

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

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

voidwrite(intn):

向輸出流寫(xiě)入一個(gè)字符。

voidwrite(byteb[]):

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

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

voidclose():

關(guān)閉輸出流。

例子6

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

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

把字符串s寫(xiě)到文件中

newLine();

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

Thearrowmissedthetarget.Theyrejectedtheuniondemand.Wheredoesthisroadgoto?

例子7按行讀取english.txt

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

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

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

定位RandomAccessFile流的讀寫(xiě)位置

getFilePointer()

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

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

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

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

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

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

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

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

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

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

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

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

字符數(shù)組

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

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

例子13

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

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

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

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

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

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

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

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

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

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

Example10_17java,WindowReader.java

,使用文件對(duì)話框打開(kāi)和保存文件13帶進(jìn)度條的輸入流

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論