Java程序設(shè)計(jì)實(shí)用教程-第10章-輸入、輸出流課件_第1頁
Java程序設(shè)計(jì)實(shí)用教程-第10章-輸入、輸出流課件_第2頁
Java程序設(shè)計(jì)實(shí)用教程-第10章-輸入、輸出流課件_第3頁
Java程序設(shè)計(jì)實(shí)用教程-第10章-輸入、輸出流課件_第4頁
Java程序設(shè)計(jì)實(shí)用教程-第10章-輸入、輸出流課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論