版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JavaIO主講:李宏利導(dǎo)讀主要內(nèi)容File類(lèi)文件字節(jié)輸入、輸出流文件字符輸入、輸出流緩沖流隨機(jī)流數(shù)組流數(shù)據(jù)流對(duì)象流序列化與對(duì)象可隆使用Scanner解析文件文件鎖概述輸入、輸出流提供一條通道程序,可以使用這條通道讀取源中的數(shù)據(jù)或把數(shù)據(jù)傳送到目的地。把輸入流的指向稱(chēng)作源,程序從指向源的輸入流中讀取源中的數(shù)據(jù);而輸出流的指向是數(shù)據(jù)要去的一個(gè)目的地,程序通過(guò)向輸出流中寫(xiě)入數(shù)據(jù)把數(shù)據(jù)傳送到目的地。1File類(lèi)
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類(lèi)的下列方法獲取文件本身的一些信息。
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)
用字符串形式返回目錄下的指定類(lèi)型的所有文件。publicFile[]listFiles(FilenameFilterobj)
用File對(duì)象形式返回目錄下的指定類(lèi)型所有文件。上述兩方法的參數(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類(lèi)創(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類(lèi)聲明一個(gè)對(duì)象(Runtime類(lèi)在java.lang包)
Runtimeec;然后使用該類(lèi)的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包提供了大量的流類(lèi),Java把InputStream抽象類(lèi)的子類(lèi)創(chuàng)建的流對(duì)象稱(chēng)作字節(jié)輸入流、OutputStream抽象類(lèi)的子類(lèi)創(chuàng)建的流對(duì)象稱(chēng)作字節(jié)輸出流,Java把Reader抽象類(lèi)的子類(lèi)創(chuàng)建的流對(duì)象稱(chēng)作字符輸入流、Writer抽象類(lèi)的子類(lèi)創(chuàng)建的流對(duì)象稱(chēng)作字符輸出流。針對(duì)不同的源或目的地,java.io包為程序提供了相應(yīng)的輸入流或輸出流,這些輸入、輸出流絕大部分都是InputStream、OutputStream、Reader或Writer的子類(lèi)。使用輸入流通常包括4個(gè)基本步驟:(1)設(shè)定輸入流的源(2)創(chuàng)建指向源的輸入流(3)讓輸入流讀取源中的數(shù)據(jù)(4)關(guān)閉輸入流。(1)構(gòu)造方法
使用FileInputStream類(lèi)的下列構(gòu)造方法創(chuàng)建指向文件的輸入流。FileInputStream(Stringname);FileInputStream(Filefile);參數(shù)name和file指定的文件稱(chēng)為輸入流的源。
2文件字節(jié)輸入流(2)使用輸入流讀取字節(jié)文件字節(jié)流可以調(diào)用從父類(lèi)繼承的read方法順序地讀取文件,只要不關(guān)閉流,每次調(diào)用read方法就順序地讀取文件中的其余內(nèi)容,直到文件的末尾或文件字節(jié)輸入流被關(guān)閉?!鬷ntread()
讀取單個(gè)字節(jié)的數(shù)據(jù),返回字節(jié)值(0~255整數(shù)),如果未讀出字節(jié)就返回-1?!鬷ntread(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類(lèi)的下列具有刷新功能的構(gòu)造方法創(chuàng)建指向文件的輸出流。FileOutputStream(Stringname);FileOutputStream(Filefile);參數(shù)name和file指定的文件稱(chēng)為輸出流的目的地
輸出流的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類(lèi)提供的read方法以字符為單位順序地讀取源中的數(shù)據(jù)。intread():intread(charb[]):intread(charb[],intoff,intlen):voidclose():longskip(longnumBytes):Writer流以字符為單位順序地寫(xiě)文件,每次調(diào)用write方法就順序地向目的地寫(xiě)入內(nèi)容。Writer類(lèi)有如下常用的方法。
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類(lèi)創(chuàng)建的對(duì)象稱(chēng)作緩沖輸入、輸出流。二者的源和目的地必須是字符輸入流和字符輸出流。構(gòu)造方法:BufferedReader(Readerin);BufferedWriter(Writerout);BufferedReader和BufferedWriter類(lèi)讀寫(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)來(lái)創(chuàng)建一個(gè)隨機(jī)訪(fǎng)問(wèn)文件流。RandomAccessFile類(lèi)創(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類(lèi)是字符數(shù)組流,使用字符數(shù)組作為流的源和目標(biāo)。例子10向內(nèi)存(輸出流的緩沖區(qū))寫(xiě)入字符串。8數(shù)據(jù)流DataInputStream和DataOutputStream類(lèi)創(chuàng)建的對(duì)象稱(chēng)為數(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類(lèi)型的數(shù)據(jù)到一個(gè)文件。例子12將字符串加密后寫(xiě)入文件,如圖10.6所示。9對(duì)象流ObjectInputStream和ObjectOutputStream類(lèi)創(chuàng)建的對(duì)象稱(chēng)為對(duì)象輸入流和對(duì)象輸出流。它的構(gòu)造方法是:ObjectInputStream(InputStreamin)ObjectOutputStream(OutputStreamout)相關(guān)方法:writeObject(Objectobj)將一個(gè)對(duì)象obj寫(xiě)入到一個(gè)文件
readObject()讀取一個(gè)對(duì)象到程序中所謂序列化:一個(gè)類(lèi)如果實(shí)現(xiàn)了Serializable接口,那么這個(gè)類(lèi)創(chuàng)建的對(duì)象就是所謂序列化的對(duì)象。
例子13
Example10_13.java,TV.java,使用對(duì)象流讀寫(xiě)TV類(lèi)創(chuàng)建的對(duì)象,效果如圖10.7所示。10序列化與對(duì)象克隆如果一個(gè)“復(fù)制品”實(shí)體的變化不會(huì)引起原對(duì)象實(shí)體發(fā)生變化,反之亦然。這樣的復(fù)制品稱(chēng)為原對(duì)象的一個(gè)克隆對(duì)象或簡(jiǎn)稱(chēng)克隆。一個(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類(lèi)和正則表達(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ì)話(huà)框構(gòu)造方法JFileChooser()創(chuàng)建初始不可見(jiàn)的有模式的文件對(duì)話(huà)框。然后文件對(duì)話(huà)框調(diào)用下述2個(gè)方法:showSaveDialog(Componenta);showOpenDialog(Componenta);都可以使得對(duì)話(huà)框可見(jiàn),只是呈現(xiàn)的外觀(guān)有所不同,showSaveDialog方法提供保存文件的界面,showOpenDialog方法提供打開(kāi)文件的界面。上述兩個(gè)方法中的參數(shù)a指定對(duì)話(huà)框可見(jiàn)時(shí)的位置,當(dāng)a是null時(shí),文件對(duì)話(huà)框出現(xiàn)在屏幕的中央;如果組件a不空,文件對(duì)話(huà)框在組件a的正前面居中顯示。例子17
Example10_17java,WindowReader.java
,使用文件對(duì)話(huà)框打開(kāi)和保存文件13帶進(jìn)度條的輸入流
如果讀取文件時(shí)希望看見(jiàn)文件的讀取進(jìn)度可以使用javax.swing包提供的輸入流類(lèi):ProgressMonitorInputStream。它的構(gòu)造方法是:ProgressMonitorInputStream(Conmponentc,Strings,InputStream);
例子1814文件鎖FileLock、FileChannel類(lèi)處理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)益歸上傳用戶(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年溫州白鹿傳媒有限公司面向社會(huì)公開(kāi)招聘其他用工形式工作人員的備考題庫(kù)及答案詳解參考
- 2025年中鐵十七局醫(yī)院公開(kāi)招聘工作人員備考題庫(kù)及參考答案詳解一套
- 2025年中共宜春市袁州區(qū)委社會(huì)工作部公開(kāi)招聘編外人員備考題庫(kù)及一套答案詳解
- 漢濱區(qū)中醫(yī)醫(yī)院2025年公開(kāi)招聘衛(wèi)生專(zhuān)業(yè)技術(shù)人員備考題庫(kù)完整參考答案詳解
- 2025年中國(guó)社會(huì)科學(xué)雜志社總編室(研究室)公開(kāi)招聘5人的備考題庫(kù)有答案詳解
- 2025年中國(guó)鐵路蘭州局集團(tuán)有限公司招聘普通高校畢業(yè)生1368備考題庫(kù)(二)及一套完整答案詳解
- 2025年曲靖市羅平縣森林草原防滅火指揮部關(guān)公開(kāi)招聘森林消防應(yīng)急救援隊(duì)員12人備考題庫(kù)及答案詳解一套
- 2025年新鄭市第二人民醫(yī)院招聘?jìng)淇碱}庫(kù)含護(hù)理帶答案詳解
- 中國(guó)電建集團(tuán)貴州工程有限公司2026屆秋季招聘150人備考題庫(kù)及答案詳解參考
- 2025年中建方程投資發(fā)展集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)參考答案詳解
- 2025年沈陽(yáng)華晨專(zhuān)用車(chē)有限公司公開(kāi)招聘參考筆試題庫(kù)及答案解析
- 2025年投融資崗位筆試試題及答案
- 烤房轉(zhuǎn)讓合同范本
- (一診)達(dá)州市2026屆高三第一次診斷性測(cè)試歷史試題(含答案)
- 《汽車(chē)網(wǎng)絡(luò)與新媒體營(yíng)銷(xiāo)》期末考試復(fù)習(xí)題庫(kù)(附答案)
- 外一骨科年終總結(jié)
- 走遍天下書(shū)為伴侶課件
- 2025四川成都東部新區(qū)招聘編外工作人員29人筆試考試參考題庫(kù)及答案解析
- 輔警筆試題庫(kù)及答案臨沂
- (已瘦身)(新教材)2025年部編人教版三年級(jí)上冊(cè)語(yǔ)文全冊(cè)期末復(fù)習(xí)單元復(fù)習(xí)課件
- 2026中國(guó)人民銀行直屬事業(yè)單位招聘60人筆試備考試卷帶答案解析
評(píng)論
0/150
提交評(píng)論