版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
注意:開始用功了!1注意:開始用功了!11《Java程序設(shè)計(jì)實(shí)用教程》第10章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平輸入、輸出流2《Java程序設(shè)計(jì)實(shí)用教程》第10章配合例子源代碼一起使用2導(dǎo)
讀3導(dǎo)
讀33輸入、輸出流提供一條通道程序,可以使用這條通道讀取源中的數(shù)據(jù)或把數(shù)據(jù)傳送到目的地。把輸入流的指向稱作源,程序從指向源的輸入流中讀取源中的數(shù)據(jù);而輸出流的指向是數(shù)據(jù)要去的一個(gè)目的地,程序通過向輸出流中寫入數(shù)據(jù)把數(shù)據(jù)傳送到目的地。概述4輸入、輸出流提供一條通道程序,可以使用這條通道讀取源中的4§10.1File類
File對象主要用來獲取文件本身的一些信息,不涉及對文件的讀寫操作。創(chuàng)建一個(gè)File對象的構(gòu)造方法有3個(gè):
File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);
5§10.1File類File對象主要用來獲取文5§10.1.1文件的屬性
File類的下列方法獲取文件本身的一些信息。
publicStringgetName()
獲取文件的名字。publicbooleancanRead()
判斷文件是否是可讀的。publicbooleancanWrite()
判斷文件是否可被寫入。publicbooleanexits()
判斷文件是否存在。publiclonglength()
獲取文件的長度(單位是字節(jié))。publicStringgetAbsolutePath()獲取文件的絕對路徑。publicStringgetParent()
獲取文件的父目錄。publicbooleanisFile()
判斷文件是否是一個(gè)普通文件,而不是目錄。publicbooleanisDirectroy()
判斷文件是否是一個(gè)目錄。publicbooleanisHidden()
判斷文件是否是隱藏文件。publiclonglastModified()
獲取文件最后修改的時(shí)間。
例10-16§10.1.1文件的屬性File類的下列6例10-1例10-1Example10_1.java
page1777例10-1例10-1Example10_1.java7§10.1.2目錄1.創(chuàng)建目錄
publicbooleanmkdir()2.列出目錄中的文件◆
publicString[]list()
用字符串形式返回目錄下的全部文件?!?/p>
publicFile[]listFiles()
用File對象形式返回目錄下的全部文件。
◆
publicString[]list(FilenameFilterobj)
用字符串形式返回目錄下的指定類型的所有文件?!?/p>
publicFile[]listFiles(FilenameFilterobj)
用File對象形式返回目錄下的指定類型所有文件。
上述兩方法的參數(shù)FilenameFilter是一個(gè)接口,該接口有一個(gè)方法:publicbooleanaccept(Filedir,Stringname);
例10-2Example10_2.java
,FileAccept.java8§10.1.2目錄1.創(chuàng)建目錄publicboo8§10.1.3文件的創(chuàng)建與刪除當(dāng)使用File類創(chuàng)建一個(gè)文件對象后,例如
Filefile=newFile("c:\\myletter","letter.txt");◆如果c:\myletter目錄中沒有名字為letter.txt文件,文件對象file調(diào)用方法publicbooleancreateNewFile();可以在c:\myletter目錄中建立一個(gè)名字為letter.txt的◆文件對象調(diào)用方法publicbooleandelete()可以刪除當(dāng)前文件,例如:
file.delete();9§10.1.3文件的創(chuàng)建與刪除當(dāng)使用File類9§10.1.4運(yùn)行可執(zhí)行文件
◆用Runtime類聲明一個(gè)對象(Runtime類在java.lang包)
Runtimeec;
◆然后使用該類的getRuntime()靜態(tài)方法創(chuàng)建這個(gè)對象:
ec=Runtime.getRuntime();
◆ec可以調(diào)用exec(Stringcommand)方法打開本地機(jī)的可執(zhí)行文件或執(zhí)行一個(gè)操作。例10-3Example10_3.java
10§10.1.4運(yùn)行可執(zhí)行文件◆用Runtime10§10.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的子類。11§10.2字節(jié)流與字符流ja11§10.2.1InputStream類與OutputSream類InputStream類提供的read方法以字節(jié)為單位順序地讀取源中的數(shù)據(jù),只要不關(guān)閉流,每次調(diào)用read方法就順序地讀取源中的其余內(nèi)容,直到源的末尾或輸入流被關(guān)閉。InputStream類有如下常用的方法。
intread()intread(byteb[])intread(byteb[],intoff,intlen)voidclose()longskip(longnumBytes)
OutputStream流以字節(jié)為單位順序地寫文件,只要不關(guān)閉流,每次調(diào)用write方法就順序地向目的地寫入內(nèi)容,直到流被關(guān)閉。OutputStream類有如下的常用的方法。
voidwrite(intn)voidwrite(byteb[])
voidwrite(byteb[],intoff,intlen)voidclose()12§10.2.1InputStream類與OutputS12§10.2.2Reader類與Writer類
1.Reader類提供的read方法以字符為單位順序地讀取源中的數(shù)據(jù)。intread():intread(charb[]):intread(charb[],intoff,intlen):voidclose():longskip(longnumBytes):
2.Writer流以字符為單位順序地寫文件,每次調(diào)用write方法就順序地向目的地寫入內(nèi)容。Writer類有如下常用的方法。
voidwrite(intn):
向輸出流寫入一個(gè)字符。
voidwrite(byteb[]):
向輸出流寫入一個(gè)字符數(shù)組。
voidwrite(byteb[],intoff,intlength):
從給定字符數(shù)組中起始于偏移量off處取len個(gè)字符寫到輸出流。
voidclose():
關(guān)閉輸出流。13§10.2.2Reader類與Writer類13§10.2.3關(guān)閉流
流都提供了關(guān)閉方法close(),盡管程序結(jié)束時(shí)會(huì)自動(dòng)關(guān)閉所有打開的流,但是當(dāng)程序使用完流后,顯式地關(guān)閉任何打開的流仍是一個(gè)良好的習(xí)慣。通過調(diào)用close()方法,可以保證操作系統(tǒng)把流緩沖區(qū)的內(nèi)容寫到它的目的地,即關(guān)閉輸出流可以把該流所用的緩沖區(qū)的內(nèi)容沖洗掉。
14§10.2.3關(guān)閉流流都提供了關(guān)閉方法c14§10.3文件字節(jié)流
由于應(yīng)用程序經(jīng)常需要和文件打交道,所以InputStream專門提供了讀寫文件的子類:FileInputStream和FileOutputSream類。如果程序?qū)ξ募牟僮鞅容^簡單,比如只是順序地讀寫文件,那么就可以使用FileInputStream和FileOutputSream類創(chuàng)建的流對文件進(jìn)行讀寫操作。
15§10.3文件字節(jié)流由于應(yīng)用程序經(jīng)常需要和文15§10.3.1文件字節(jié)輸入流1.創(chuàng)建文件字節(jié)輸入流
FileInputStream類創(chuàng)建的對象被稱作文件字節(jié)輸入流。
◆構(gòu)造方法:
FileInputStream(Stringname);FileInputStream(Filefile);◆讀取一個(gè)名為hello.txt的文件,建立一個(gè)文件輸入流對象,如下所示:
try{FileInputStreamin=newFileInputStream("hello.txt");}catch(IOExceptione){System.out.println("Filereaderror:"+e);}2.read方法以字節(jié)為單位讀文件
intread();intread(byteb[]);intread(byteb[],intoff,intlen);
例10-4Example10_4.java
16§10.3.1文件字節(jié)輸入流1.創(chuàng)建文件字節(jié)輸入流116§10.3.2文件字節(jié)輸出流
1.創(chuàng)建文件字節(jié)輸出流
FileOutputStream類創(chuàng)建的對象被稱作文件字節(jié)輸出流。構(gòu)造方法:
FileOutputStream(Stringname)FileOutputStream(Filefile)2.以字節(jié)為單位寫文件
FileOutputStream流的目的地是文件,所以文件輸出流調(diào)用write(byteb[])方法把字節(jié)寫入到文件。例10-5Example10_5.java
17§10.3.2文件字節(jié)輸出流1.創(chuàng)建文件字節(jié)輸出流17§10.4文件字符流
1.FileReader和FileWriter用來創(chuàng)建文件字符輸入、輸出流,構(gòu)造方法:
FileReader(Stringfilename);FileReader(Filefilename);FileWriter(Stringfilename);FileWriter(Filefilename);2.字符輸入流和輸出流的read()和write()方法以字符為基本單位處理數(shù)據(jù)。
例10-6Example10_6.java
18§10.4文件字符流1.FileReader和Fil18§10.5緩沖流1.BufferedReader和BufferedWriter類創(chuàng)建的對象稱作緩沖輸入、輸出流。二者的源和目的地必須是字符輸入流和字符輸出流。構(gòu)造方法:
BufferedReader(Readerin);BufferedWriter(Writerout);2.BufferedReader和BufferedWriter類讀寫文件的方法:
readLine()
BufferedReader流讀取文本行
write(Strings,intoff,intlen)BufferedWriter流把字符串s寫到文件中
newLine();
BufferedWriter流向文件寫入一個(gè)回行符
例10-7
Example10_7.java
19§10.5緩沖流1.BufferedReader19§10.6隨機(jī)流
使用RandomAccessFile類來創(chuàng)建一個(gè)隨機(jī)訪問文件流。RandomAccessFile類創(chuàng)建的流的指向既可以作為源也可以作為目的地。
構(gòu)造方法:
RandomAccessFile(Stringname,Stringmode);RandomAccessFile(Filefile,Stringmode);◆相關(guān)方法:
seek(longa)
定位RandomAccessFile流的讀寫位置
getFilePointer()
獲取流的當(dāng)前讀寫位置
例10-8Example10_8.java◆表10.1RandomAccessFile類的常用方法◆處理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);
例10-9Example10_9.java
20§10.6隨機(jī)流使用RandomAccessF20表10.1RandomAccessFile類的常用方法21表10.1RandomAccessFile類的常用方法221§10.7數(shù)組流
1.字節(jié)數(shù)組流:字節(jié)數(shù)組輸入流ByteArrayInputStream和字節(jié)數(shù)組輸出流ByteArrayOutputStream分別使用字節(jié)數(shù)組作為流的源和目標(biāo)。◆
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ū)寫入一個(gè)字節(jié)
publicvoidwrite(byte[]b,intoff,intlen);將參數(shù)b中指定的len個(gè)字節(jié)順序地寫入緩沖區(qū)
publicbyte[]toByteArray();返回輸出流寫入到緩沖區(qū)的全部字節(jié)2.字符數(shù)組
CharArrayReader和CharArrayWriter類是字符數(shù)組流,字符數(shù)組流分別使用字符數(shù)組作為流的源和目標(biāo)。例10-10Example10_10.java
22§10.7數(shù)組流1.字節(jié)數(shù)組流:字節(jié)數(shù)組輸入22§10.8數(shù)據(jù)流
DataInputStream和DataOutputStream類創(chuà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指定的底層輸出流◆表10.2是DataInputStream和DataOutputStream類的常用方法例10-11
Example10_11.java
例10-12
Example10_12.java
EncryptAndDecrypt.java
23§10.8數(shù)據(jù)流DataInputStrea23表10.2 DataInputStream及DataOutputSteam類的部分方法
24表10.2 DataInputStream及DataOut24§10.9對象流
ObjectInputStream和ObjectOutputStream類創(chuàng)建的對象稱為對象輸入流和對象輸出流。
它的構(gòu)造方法是:
ObjectInputStream(InputStreamin)ObjectOutputStream(OutputStreamout)
◆相關(guān)方法:
writeObject(Objectobj)將一個(gè)對象obj寫入到一個(gè)文件
readObject()
讀取一個(gè)對象到程序中
◆所謂序列化:一個(gè)類如果實(shí)現(xiàn)了Serializable接口,那么這個(gè)類創(chuàng)建的對象就是所謂序列化的對象。
例10-13
TV.java
Example10_13.java
25§10.9對象流ObjectInput25§10.10序列化與對象克隆
◆如果一個(gè)“復(fù)制品”實(shí)體的變化不會(huì)引起原對象實(shí)體發(fā)生變化,反之亦然。這樣的復(fù)制品稱為原對象的一個(gè)克隆對象或簡稱克隆?!粢粋€(gè)對象調(diào)用clone()方法就可以獲取該對象的克隆對象?!魧ο筝斎肓魍ㄟ^對象的序列化信息來得到當(dāng)前對象的一個(gè)克隆。
例10-13
TV.java
Example10_13.java
26§10.10序列化與對象克隆◆如果一個(gè)“復(fù)制品”實(shí)26§10.11文件鎖
◆FileLock、FileChannel類處理Java提供的文件鎖功能。它們分別在java.nio和java.nio.channels包中。
◆輸入、輸出流讀寫文件時(shí)可以使用文件鎖。
◆
RondomAccessFile創(chuàng)建的流在讀寫文件時(shí)使用文件鎖的步驟如下:1.先使用RondomAccessFile流建立指向文件的流對象,該對象的讀寫屬性必須是rw,例如:
RandomAccessFileinput=newRandomAccessFile("Example.java","rw");2.Input流調(diào)用方法getChannel()獲得一個(gè)連接到地層文件的FileChannel對象(信道),例如
FileChannelchannel=input.getChannel();3.信道調(diào)用tryLock()或lock()方法獲得一個(gè)FileLock(文件鎖)對象,這一過程也稱作對文件加鎖,例如:
FileLocklock=channel.tryLock();
例10-14Example10_14.java
27§10.11文件鎖◆FileLock、FileCh27§10.12使用Scanner解析文件_1
使用Scanner類和正則表達(dá)式來解析文件。1.使用默認(rèn)分隔標(biāo)記解析文件
創(chuàng)建Scanner對象,并指向要解析的文件,例如:
Filefile=newFile("hello.java");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 線上課程設(shè)計(jì) 動(dòng)畫
- 藥學(xué)課程設(shè)計(jì)指南
- 機(jī)設(shè)課程設(shè)計(jì)的模板
- 網(wǎng)絡(luò)服務(wù)器配置課程設(shè)計(jì)
- 捅馬蜂窩課程設(shè)計(jì)
- 智能可穿戴手表課程設(shè)計(jì)
- 2024年職業(yè)生涯規(guī)劃教案篇
- 藥品檢驗(yàn)類課程設(shè)計(jì)論文
- 2024年移動(dòng)智慧家庭工程師(高級)資格認(rèn)證考試題庫-上(選擇題)
- 物流運(yùn)輸行業(yè)營銷工作總結(jié)
- 2024年度陶瓷產(chǎn)品代理銷售與品牌戰(zhàn)略合作協(xié)議3篇
- 中國農(nóng)業(yè)銀行信用借款合同
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之9:“5領(lǐng)導(dǎo)作用-5.3創(chuàng)新戰(zhàn)略”(雷澤佳編制-2025B0)
- 2024版旅游景區(qū)旅游巴士租賃合同3篇
- LINUX網(wǎng)絡(luò)操作系統(tǒng)知到智慧樹章節(jié)測試課后答案2024年秋湖北交通職業(yè)技術(shù)學(xué)院
- 河北省邯鄲市2023-2024學(xué)年高一上學(xué)期期末質(zhì)量檢測地理試題 附答案
- 醫(yī)療機(jī)構(gòu)競業(yè)限制協(xié)議
- 2024年度物業(yè)管理公司員工獎(jiǎng)懲制度3篇
- 2024年7月國家開放大學(xué)法學(xué)本科《知識產(chǎn)權(quán)法》期末考試試題及答案
- 2024年河南省公務(wù)員錄用考試《行測》試題及答案解析
- (2024年)剪映入門教程課件
評論
0/150
提交評論