Java程序設(shè)計(jì)教程課件 第6章 文件操作程序設(shè)計(jì)_第1頁
Java程序設(shè)計(jì)教程課件 第6章 文件操作程序設(shè)計(jì)_第2頁
Java程序設(shè)計(jì)教程課件 第6章 文件操作程序設(shè)計(jì)_第3頁
Java程序設(shè)計(jì)教程課件 第6章 文件操作程序設(shè)計(jì)_第4頁
Java程序設(shè)計(jì)教程課件 第6章 文件操作程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章

文件操作程序設(shè)計(jì)6.1應(yīng)用File類設(shè)計(jì)Java程序6.2應(yīng)用字節(jié)流設(shè)計(jì)Java程序6.4應(yīng)用字符流設(shè)計(jì)Java程序?qū)W習(xí)要點(diǎn)6.3應(yīng)用RandomAccessFile類設(shè)計(jì)Java程序

教學(xué)導(dǎo)航教學(xué)目標(biāo)熟悉Java中流的分類,了解常用的字節(jié)流和字符流,了解常用的I/O流類學(xué)會(huì)應(yīng)用File類設(shè)計(jì)Java程序?qū)W會(huì)應(yīng)用字節(jié)流設(shè)計(jì)Java程序?qū)W會(huì)應(yīng)用字符流設(shè)計(jì)Java程序?qū)W會(huì)應(yīng)用RandomAccessFile類設(shè)計(jì)Java程序教學(xué)重點(diǎn)常用的I/O流類File類及其應(yīng)用編程字節(jié)流和字符流及其應(yīng)用編程RandomAccessFile類及其應(yīng)用編程

身臨其境Windows操作系統(tǒng)自帶的【記事本】軟件如圖6-1所示,在【記事本】的編輯區(qū)域中可以實(shí)現(xiàn)輸入與修改文本內(nèi)容、設(shè)置格式、保存文件、打開文件等操作。“購買京東自營商品,發(fā)票什么時(shí)候能送到?”的回答內(nèi)容如圖6-2所示,可以將不同問題的回答內(nèi)容存放在文本文件中,并根據(jù)需要?jiǎng)討B(tài)展示在網(wǎng)頁中。圖6-1

Windows操作系統(tǒng)自帶的【記事本】軟件圖6-2“購買京東自營商品,發(fā)票什么時(shí)候能送到?”的回答內(nèi)容

前導(dǎo)知識【知識6-1】認(rèn)知Java流

為了讀取或輸出數(shù)據(jù),Java程序與數(shù)據(jù)發(fā)送者或接收者之間會(huì)建立一個(gè)數(shù)據(jù)通道,這個(gè)數(shù)據(jù)通道被抽象為流。輸入時(shí)通過流讀取數(shù)據(jù)源,可以打開一個(gè)通向程序的流,這個(gè)程序可以是文件、內(nèi)存或網(wǎng)絡(luò)連接。類似地,輸出時(shí)通過流將數(shù)據(jù)寫入目的地,可以打開一個(gè)通向目的地的流。此時(shí)數(shù)據(jù)好像在流中流動(dòng)一樣,流的示意如圖6-3所示,讀取數(shù)據(jù)時(shí),對于程序來說是輸入,對應(yīng)輸入流,將數(shù)據(jù)從數(shù)據(jù)源傳遞給程序;寫入數(shù)據(jù)時(shí),對于程序來說是輸出,對應(yīng)輸出流,將數(shù)據(jù)從程序傳遞到目的地,如內(nèi)存或文件。輸入流只能讀,不能寫;而輸出流只能寫,不能讀。輸入流可以從鍵盤或文件中獲取數(shù)據(jù),此時(shí)鍵盤或文件是數(shù)據(jù)源;輸出流可以向顯示器屏幕、打印機(jī)或文件中傳輸數(shù)據(jù),此時(shí)顯示器屏幕、打印機(jī)和文件是目的地。從圖6-3可以看出,流是傳遞數(shù)據(jù)的載體,是數(shù)據(jù)經(jīng)歷的路徑。通過流,程序可以把數(shù)據(jù)從一個(gè)地方帶到另一個(gè)地方。流可以視為程序在數(shù)據(jù)發(fā)送者和數(shù)據(jù)接收者之間建立的數(shù)據(jù)通道。Java程序?qū)Ω鞣N流的處理基本相同,都包括打開流、讀取/寫入數(shù)據(jù)、關(guān)閉流等操作。就像水龍頭,需要水時(shí),打開水龍頭,不需要水時(shí),關(guān)閉水龍頭。流的設(shè)計(jì)使Java程序在處理不同I/O設(shè)備時(shí)非常方便。Java程序不直接操縱I/O設(shè)備,而是在程序和設(shè)備之間加入一個(gè)介質(zhì)流。采用流的目的是使程序的輸入輸出操作獨(dú)立于具體設(shè)備,程序一旦建立了流,就可以不用考慮起點(diǎn)或終點(diǎn)的設(shè)備種類,而只關(guān)心使用的流。圖6-3

流的示意

前導(dǎo)知識【知識6-1】認(rèn)知Java流

分類依據(jù)分類名稱說明常用類示例流的方向輸入流從數(shù)據(jù)源到程序的流,只能從該流中讀取數(shù)據(jù),不能向該流中寫數(shù)據(jù),如從鍵盤輸入數(shù)據(jù)InputStream、Reader輸出流從程序到目的地的流,只能把數(shù)據(jù)寫到該流中,不能從該流中讀取數(shù)據(jù),如在屏幕中輸出數(shù)據(jù)OutputStream、Writer所關(guān)聯(lián)的是否為最終數(shù)據(jù)源或目的地節(jié)點(diǎn)流直接與最終數(shù)據(jù)源或目的地關(guān)聯(lián)的流,該流只提供一些基本的讀寫方法FileInputStream、FileOutputStream、StringReader、StringWriter處理流不直接連接到最終數(shù)據(jù)源或目的地,而是對其他I/O流進(jìn)行連接和封裝的流,該流提供一些功能比較強(qiáng)大的方法DataInputStream、BufferedInputStream、DataOutputStream、BufferedOutputStream流操作的數(shù)據(jù)基本單元字節(jié)流以字節(jié)為基本單位進(jìn)行數(shù)據(jù)的I/O,可用于二進(jìn)制數(shù)據(jù)的讀寫InputStream、OutputStream字符流以字符為基本單位進(jìn)行數(shù)據(jù)的I/O,可用于文本數(shù)據(jù)的讀寫Reader、Writer表6-1Java中流的各種分類方式1.Java中流的分類Java中的流有多種分類方式,各種分類方式如表6-1所示。

前導(dǎo)知識【知識6-1】認(rèn)知Java流2.字節(jié)流字節(jié)流以字節(jié)為基本單位處理數(shù)據(jù),InputStream類和OutputStream類是字節(jié)流的兩個(gè)頂層父類,提供了輸入流類和輸出流類的通用應(yīng)用程序接口(ApplicationProgramInterface,API),輸入流類和輸出流類提供的方法都以字節(jié)為單位讀寫數(shù)據(jù)。抽象類InputStream是所有字節(jié)輸入流的父類,該類中定義了讀取字節(jié)數(shù)據(jù)的基本方法,InputStream類中常用的方法如表6-2所示。抽象類OutputStream是所有字節(jié)輸出流的父類,該類中定義了輸出字節(jié)數(shù)據(jù)的基本方法,OutputStream類中常用的方法如表6-3所示。方法功能說明publicabstractintread()從輸入流中讀取一個(gè)字節(jié)作為方法的返回值,如果返回值為-1,則表示到達(dá)流的末尾publicintread(byte[]b)將讀取的數(shù)據(jù)保存在一個(gè)字節(jié)數(shù)組中,并返回讀取的字節(jié)數(shù)publiclongskip(longn)在輸入流中最多跳過n個(gè)字節(jié),返回跳過的字節(jié)數(shù)publicintavailable()返回輸入流中可以不受阻塞地讀取的字節(jié)數(shù)publicvoidmark(intbMax)標(biāo)記當(dāng)前位置,參數(shù)用于設(shè)置從標(biāo)記位置開始可以讀取的最大字節(jié)數(shù)publicvoidreset()將輸入流重新定位到最后一次mark()方法標(biāo)記的位置publicvoidclose()關(guān)閉輸入流,釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源方法功能說明publicabstractvoidwrite(intb)將指定長度的數(shù)據(jù)寫入輸出流publicvoidwrite(byte[]b)將字節(jié)數(shù)組的內(nèi)容寫入輸出流publicvoidwrite(byte[]b,intoff,intlen)將字節(jié)數(shù)組b中從off位置開始的len個(gè)字節(jié)寫入輸出流publicvoidflush()刷新輸出流,并強(qiáng)制將緩沖區(qū)的全部字節(jié)寫入輸出流publicvoidclose()關(guān)閉輸出流,并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源表6-2

InputStream類中常用的方法表6-3

OutputStream類中常用的方法

前導(dǎo)知識【知識6-1】認(rèn)知Java流3.字符流字符流以字符為基本單位處理數(shù)據(jù),Reader類和Writer類是字符的兩個(gè)頂層抽象父類,其定義了在I/O流中讀寫字符數(shù)據(jù)的通用API。字符流能夠處理Unicode字符集中的所有字符。抽象類Reader是所有字符輸入流的父類,該類中定義了讀取字符數(shù)據(jù)的基本方法,Reader類中常用的方法如表6-4所示。抽象類Writer是所有字符輸出流的父類,該類中定義了寫入字符數(shù)據(jù)的基本方法,Writer類中常用的方法如表6-5所示。表6-4Reader類中常用的方法方法功能說明publicintread()讀取一個(gè)字符作為方法的返回值,如果返回值為-1,則表示到達(dá)流的末尾publicintread(char[]c)將讀取的數(shù)據(jù)保存在一個(gè)字符數(shù)組中,并返回讀取的字符數(shù)publiclongskip(longn)在輸入流中最多跳過n個(gè)字符,返回跳過的字符數(shù)publicvoidmark(intcMax)標(biāo)記當(dāng)前位置,參數(shù)用于設(shè)置從標(biāo)記位置開始可以讀取的最大字符數(shù)publicvoidreset()將輸入流重新定位到最后一次mark()方法標(biāo)記的位置publicvoidclose()關(guān)閉輸入流,釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源方法功能說明publicvoidwrite(intc)將指定長度的數(shù)據(jù)寫入輸出流publicvoidwrite(char[]c)將字符數(shù)組的內(nèi)容寫入輸出流publicabstractvoidwrite(char[]c,intoff,intlen)將字符數(shù)組c中從偏移量off開始的len個(gè)字符寫入輸出流publicvoidwrite(Stringstr)將字符串str中的全部字符寫入輸出流publicvoidwrite(Stringstr,intoff,intlen)將字符串str中從偏移量off開始的len個(gè)字符寫入輸出流publicvoidflush()刷新輸出流,并強(qiáng)制將緩沖區(qū)的全部字符寫入輸出流publicvoidclose()關(guān)閉輸出流,并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源表6-5

Writer類中常用的方法

前導(dǎo)知識【知識6-1】認(rèn)知Java流4.I/O流的套接在Java程序中,通過節(jié)點(diǎn)流可以直接讀取數(shù)據(jù)源中的數(shù)據(jù),或者將數(shù)據(jù)直接寫到目的地中。節(jié)點(diǎn)流可以直接與數(shù)據(jù)源或目的地關(guān)聯(lián),它提供了基本的數(shù)據(jù)讀寫方法。在使用節(jié)點(diǎn)流FileInputStream和FileOutputStream對文件進(jìn)行讀寫時(shí),每次讀寫字節(jié)數(shù)據(jù)都要對文件進(jìn)行操作。為了提高讀寫效率,避免多次對文件進(jìn)行操作,Java提供了讀寫字節(jié)數(shù)據(jù)的節(jié)點(diǎn)流BufferedInputStream和BufferedOutputStream。使用節(jié)點(diǎn)流FileInputStream和FileOutputStream讀寫數(shù)據(jù)時(shí),只能以字節(jié)為單位。為了增強(qiáng)讀寫功能,Java提供了DataInputStream類和DataOutputStream類來實(shí)現(xiàn)按數(shù)據(jù)類型讀寫數(shù)據(jù)。因此,根據(jù)系統(tǒng)的實(shí)際需求選擇合適的處理流可以提高讀寫效率并增強(qiáng)讀寫能力。在Java程序中,通常將節(jié)點(diǎn)流與處理流有機(jī)結(jié)合起來使用。因?yàn)樘幚砹鞑恢苯优c數(shù)據(jù)源或目的地關(guān)聯(lián),所以可以將節(jié)點(diǎn)流作為參數(shù)來構(gòu)造處理流,即處理流對節(jié)點(diǎn)流進(jìn)行了一次封裝。處理流還可以作為參數(shù)來構(gòu)造其他處理流,從而形成了處理流對節(jié)點(diǎn)流或其他處理流的進(jìn)一步封裝,這就是I/O流的套接。以下代碼是I/O流套接的示例。InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);在System類中,靜態(tài)成員in是系統(tǒng)輸入流,類型為InputStream,在Java程序運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)提供。默認(rèn)情況下,系統(tǒng)輸入流會(huì)連接鍵盤,所以通過System.in可以讀取鍵盤輸入。System.in的類型為InputStream,可以直接讀取鍵盤輸入,屬于節(jié)點(diǎn)流,以上示例中第1條語句將其作為參數(shù)封裝在處理流InputStreamReader中,從而形成I/O流的套接,并將InputStream由字節(jié)流轉(zhuǎn)換成字符流;第2條語句將轉(zhuǎn)換后的字符流作為參數(shù)封裝在處理流BufferedReader中,從而形成I/O流的再次套接,并將字符流轉(zhuǎn)換為緩沖字符流。節(jié)點(diǎn)流是以物理I/O節(jié)點(diǎn)作為構(gòu)造方法的參數(shù),處理流構(gòu)造方法的參數(shù)不是物理節(jié)點(diǎn)而是已經(jīng)存在的節(jié)點(diǎn)流或處理流。通過處理流來封裝節(jié)點(diǎn)流可以隱藏底層設(shè)備節(jié)點(diǎn)的差異,使節(jié)點(diǎn)流完成與硬件設(shè)備的交互,處理流則提供更加方便的I/O方法。

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流java.io包中常用的節(jié)點(diǎn)流如表6-6所示,java.io包中常用的處理流如表6-7所示。訪問對象字節(jié)輸入流字節(jié)輸出流字符輸入流字符輸出流文件FileInputStreamFileOutputStreamFileReaderFileWriter字符串--StringReaderStringWriter內(nèi)存數(shù)組ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter流的類型字節(jié)輸入流字節(jié)輸出流字符輸入流字符輸出流頂層父類InputStreamOutputStreamReaderWriter緩沖流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter過濾流FilterInputStreamFilterOutputStreamFilterReaderFilterWriter數(shù)據(jù)流DataInputStreamDataOutputStream--對象流ObjectInputStreamObjectOutputStream--轉(zhuǎn)換流--InputStreamReaderOutputStreamWriter打印流-PrintStream-PrintWriter表6-6

java.io包中常用的節(jié)點(diǎn)流表6-7

java.io包中常用的處理流

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流InputStream、OutputStream、Reader、Writer這4個(gè)類都是抽象類,無法用來創(chuàng)建對象,必須使用它們的子類覆蓋其抽象方法,從而創(chuàng)建對象。(1)文件流文件流是一種節(jié)點(diǎn)流,包括FileInputStream類、FileOutputStream類、FileReader類和FileWriter類,是對文件進(jìn)行讀或?qū)懙念悺N募鞯臉?gòu)造方法經(jīng)常以字符串形式的文件名或者一個(gè)File類的對象作為參數(shù)。(2)緩沖流硬盤、鍵盤、打印機(jī)等硬件設(shè)備讀寫數(shù)據(jù)的速度遠(yuǎn)遠(yuǎn)小于內(nèi)存讀寫數(shù)據(jù)的速度,為了減少硬件設(shè)備的讀寫次數(shù),通常利用緩沖流從硬件設(shè)備中一次性讀寫一定長度的數(shù)據(jù),以提高系統(tǒng)的讀寫性能和傳輸效率。緩沖流實(shí)現(xiàn)了對基本I/O流的封裝并創(chuàng)建了內(nèi)部緩沖區(qū)。緩沖區(qū)是專門用于存儲(chǔ)數(shù)據(jù)的一塊內(nèi)存空間,用于硬件設(shè)備與內(nèi)存之間讀/寫數(shù)據(jù),以提高系統(tǒng)讀寫數(shù)據(jù)的性能。輸入時(shí),輸入流一次性讀取一定長度的數(shù)據(jù)到緩沖區(qū),緩沖流通過緩沖區(qū)來讀取數(shù)據(jù)。當(dāng)從一個(gè)緩沖流讀取數(shù)據(jù)時(shí),實(shí)際是從緩沖區(qū)中讀取數(shù)據(jù),當(dāng)緩沖區(qū)為空時(shí),系統(tǒng)將從相應(yīng)設(shè)備自動(dòng)讀取數(shù)據(jù),并讀取盡可能多的數(shù)據(jù)充滿緩沖區(qū)。輸出時(shí),緩沖流將數(shù)據(jù)寫入緩沖區(qū),輸出流將緩沖區(qū)的數(shù)據(jù)一次性輸出。向一個(gè)緩沖流寫入數(shù)據(jù)時(shí),系統(tǒng)將數(shù)據(jù)發(fā)送到緩沖區(qū),而不是直接發(fā)送到外部設(shè)備,緩沖區(qū)自動(dòng)記錄數(shù)據(jù),當(dāng)緩沖區(qū)滿時(shí),系統(tǒng)將數(shù)據(jù)全部發(fā)送到外部設(shè)備。

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流緩沖流包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter這4個(gè)類,它們的功能都是對輸入輸出流進(jìn)行緩沖,把數(shù)據(jù)從原始流成塊地讀入或者把數(shù)據(jù)積累成一個(gè)大數(shù)據(jù)塊后再成批寫出,通過減少系統(tǒng)資源的讀寫次數(shù)來加快程序的執(zhí)行。創(chuàng)建緩沖流時(shí)就創(chuàng)建了一個(gè)內(nèi)部緩沖數(shù)組,緩沖流的4個(gè)類的構(gòu)造方法如表6-8所示。BufferedInputStream和BufferedOutputStream實(shí)現(xiàn)了對InputStream和OutputStream的封裝,并創(chuàng)建了內(nèi)部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字節(jié);BufferedReader和BufferedWriter實(shí)現(xiàn)了對Reader和Writer的封裝,并創(chuàng)建了內(nèi)部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字符。緩沖流類型構(gòu)造方法字節(jié)輸入流publicBufferedInputStream(InputStreamis)publicBufferedInputStream(InputStreamis,intsize)字節(jié)輸出流publicBufferedOutputStream(OutputStreamos)publicBufferedOutputStream(OutputStreamos,intsize)字符輸入流publicBufferedReader(Readerread)publicBufferedReader(Readerread,intsize)字符輸出流publicBufferedWriter(Writerwrite)publicBufferedWriter(Writerwrite,intsize)表6-8

緩沖流的4個(gè)類的構(gòu)造方法

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流緩沖流包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter這4個(gè)類,它們的功能都是對輸入輸出流進(jìn)行緩沖,把數(shù)據(jù)從原始流成塊地讀入或者把數(shù)據(jù)積累成一個(gè)大數(shù)據(jù)塊后再成批寫出,通過減少系統(tǒng)資源的讀寫次數(shù)來加快程序的執(zhí)行。創(chuàng)建緩沖流時(shí)就創(chuàng)建了一個(gè)內(nèi)部緩沖數(shù)組,緩沖流的4個(gè)類的構(gòu)造方法如表6-8所示。BufferedInputStream和BufferedOutputStream實(shí)現(xiàn)了對InputStream和OutputStream的封裝,并創(chuàng)建了內(nèi)部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字節(jié);BufferedReader和BufferedWriter實(shí)現(xiàn)了對Reader和Writer的封裝,并創(chuàng)建了內(nèi)部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字符。BufferedReader類增加了方法publicStringreadLine(),用于讀取一個(gè)文本行并返回該行的字符串,如果已到達(dá)字符流的末尾,則返回null。BufferedWriter類增加了方法publicvoidnewLine(),用于寫入一個(gè)行分隔符。緩沖流類型構(gòu)造方法字節(jié)輸入流publicBufferedInputStream(InputStreamis)publicBufferedInputStream(InputStreamis,intsize)字節(jié)輸出流publicBufferedOutputStream(OutputStreamos)publicBufferedOutputStream(OutputStreamos,intsize)字符輸入流publicBufferedReader(Readerread)publicBufferedReader(Readerread,intsize)字符輸出流publicBufferedWriter(Writerwrite)publicBufferedWriter(Writerwrite,intsize)表6-8

緩沖流的4個(gè)類的構(gòu)造方法

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流(3)數(shù)據(jù)流數(shù)據(jù)流包括數(shù)據(jù)輸入流DataInputStream類和數(shù)據(jù)輸出流DataOutputStream類,它們允許按Java的基本數(shù)據(jù)類型讀寫數(shù)據(jù)流中的數(shù)據(jù)。數(shù)據(jù)輸入流以一種與機(jī)器無關(guān)的方式讀取Java基本數(shù)據(jù)類型,并使用UTF-8修改版格式編碼的字符串。定義DataInputStream類的語法格式如下,該類為FilterInputStream類的子類,并且實(shí)現(xiàn)了DataInput接口。publicclassDataInputStreamextendsFilterInputStreamimplementsDataInputDataInputStream類的構(gòu)造方法為publicDataInputStream(InputStreamis)。DataInputStream類中除了具有InputStream類中字節(jié)數(shù)據(jù)的讀取方法read()以外,還具有DataInput接口中Java基本數(shù)據(jù)類型以及字符串?dāng)?shù)據(jù)的讀取方法。DataInputStream類中讀取數(shù)據(jù)的方法如表6-9所示。表6-9DataInputStream類中讀取數(shù)據(jù)的方法方法功能說明publicfinalbooleanreadBoolean()返回讀取的boolean值publicfinalbytereadByte()返回讀取的byte值publicfinalshortreadShort()返回讀取的short值publicfinalcharreadChar()返回讀取的char值publicfinalintreadInt()返回讀取的int值publicfinallongreadLong()返回讀取的long值publicfinalfloatreadFloat()返回讀取的float值publicfinaldoublereadDouble()返回讀取的double值publicfinalStringreadUTF()返回使用UTF-8修改版格式編碼的字符串

前導(dǎo)知識【知識6-1】認(rèn)知Java流5.常用的I/O流數(shù)據(jù)輸出流DataOutputStream將Java基本數(shù)據(jù)類型以及使用UTF-8修改版格式編碼的字符串寫入輸出流。定義DataOutputStream類的語法格式如下,該類為FilterOutputStream類的子類,并且實(shí)現(xiàn)了DataOutput接口。publicclassDataOutputStreamextendsFilterOutputStreamimplementsDataOutputDataOutputStream類的構(gòu)造方法為publicDataOutputStream(OutputStreamos)。DataOutputStream類中除了具有OutputStream類中字節(jié)數(shù)據(jù)的寫入方法write()以外,還具有DataOutput接口中Java基本數(shù)據(jù)類型以及字符串?dāng)?shù)據(jù)的寫入方法。DataOutputStream類中寫入數(shù)據(jù)的方法如表6-10所示。DataInputStream類和DataOutputStream類應(yīng)配對使用完成數(shù)據(jù)讀寫,且讀取數(shù)據(jù)類型的順序要與寫入數(shù)據(jù)類型的順序完全相同。I/O流使用完畢后應(yīng)當(dāng)關(guān)閉,關(guān)閉處理流時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉處理流封裝的節(jié)點(diǎn)流。方法功能說明publicfinalvoidwriteBoolean(Booleanb)將boolean值寫入輸出流publicfinalvoidwriteByte(intb)將參數(shù)b的低8位寫入輸出流publicfinalvoidwriteShort(ints)將參數(shù)s的低16位寫入輸出流publicfinalvoidwriteChar(intc)將參數(shù)c的低16位寫入輸出流publicfinalvoidwriteInt(inti)將int值寫入輸出流publicfinalvoidwriteLong(longl)將long值寫入輸出流publicfinalvoidwriteFloat(floatf)將float值寫入輸出流publicfinalvoidwriteDouble(doubled)將double值寫入輸出流publicfinalvoidwriteUTF(Stringstr)將字符串使用UTF-8修改版格式編碼,并寫入輸出流表6-10

DataOutputStream類中寫入數(shù)據(jù)的方法

前導(dǎo)知識【知識6-1】認(rèn)知Java流(4)轉(zhuǎn)換流在使用字節(jié)流InputStream和OutputStream處理數(shù)據(jù)時(shí),通過InputStreamReader類和OutputStreamWriter類的封裝可以實(shí)現(xiàn)字符數(shù)據(jù)處理功能。InputStreamReader類是Reader類的子類,是字節(jié)流通向字符流的“橋梁”,它使用平臺默認(rèn)字符集或指定字符集讀取字節(jié)并將其解碼為字符;OutputStreamWriter類是Writer類的子類,是字符流通向字節(jié)流的“橋梁”,它使用平臺默認(rèn)字符集或指定字符集將字符編碼為字節(jié)后輸出。InputStreamReader類的構(gòu)造方法如下。①publicInputStreamReader(InputStreamis)。②publicInputStreamReader(InputStreamis,StringcharsetName)。OutputStreamWriter類的構(gòu)造方法如下。①publicOutputStreamWriter(OutputStreamos)。②publicOutputStreamWriter(OutputStreamos,StringcharsetName)。

前導(dǎo)知識【知識6-1】認(rèn)知Java流(5)打印流PrintStream類和PrintWriter類都是打印流,它們在許多方面提供了相似的功能,例如,它們可以將各種基本數(shù)據(jù)類型的數(shù)據(jù)輸出到字符串流中,并提供自動(dòng)刷新功能。這兩個(gè)類的不同點(diǎn)在于自動(dòng)刷新功能的設(shè)定,PrintStream會(huì)在調(diào)用println()方法或輸出包含換行符(\n)的字符串時(shí)自動(dòng)刷新,而PrintWriter僅在調(diào)用println()方法時(shí)自動(dòng)刷新。PrintStream類封裝了OutputStream,它可以使用print()和println()兩個(gè)方法輸出Java中所有基本類型和引用類型的數(shù)據(jù)。與其他的類有所不同,PrintStream不會(huì)拋出IOException異常,而是在發(fā)生IOException異常時(shí)將其內(nèi)部錯(cuò)誤狀態(tài)設(shè)置為true,并使用checkError()方法進(jìn)行檢測。PrintStream類的構(gòu)造方法如下。①publicPrintStream(OutputStreamos)。②pubicPrintStream(Stringfilename)。③publicPrintStream(Filefile)。PrintWriter類除了可以封裝Writer之外,還可以封裝OutputStream,可以使用print()和println()兩個(gè)方法完成各種類型數(shù)據(jù)的輸出。PrintWriter的構(gòu)造方法如下。①publicPrintWriter(Writerwrite)。②publicPrintWriter(OutputStreamos)。③publicPrintWriter(Stringfilename)。④publicPrintWriter(Filefile)。

前導(dǎo)知識【知識6-1】認(rèn)知Java流(6)標(biāo)準(zhǔn)I/O流標(biāo)準(zhǔn)I/O流的功能是通過Java的System類實(shí)現(xiàn)的,System類在java.lang包中定義,是一個(gè)公共最終類,不能被繼承,也不能被實(shí)例化,可以在程序中直接調(diào)用。System類中,定義了標(biāo)準(zhǔn)輸入流對象in、標(biāo)準(zhǔn)輸出流對象out、標(biāo)準(zhǔn)錯(cuò)誤輸出流對象err。標(biāo)準(zhǔn)流對象在Java程序運(yùn)行時(shí)會(huì)自動(dòng)提供;標(biāo)準(zhǔn)輸入流對象將會(huì)讀取鍵盤的輸入;標(biāo)準(zhǔn)輸出流對象將數(shù)據(jù)在控制臺窗口中輸出;標(biāo)準(zhǔn)錯(cuò)誤流對象將錯(cuò)誤信息在控制臺窗口中輸出。定義這3個(gè)標(biāo)準(zhǔn)流對象的語法格式如下。①publicstaticfinalInputStreamin。②publicstaticfinalPrintStreamout。③publicstaticfinalPrintStreamerr。System類提供了3個(gè)用于重定向標(biāo)準(zhǔn)I/O流的方法,既可以將從鍵盤輸入數(shù)據(jù)定向?yàn)閺囊延械奈募休斎霐?shù)據(jù),也可以將輸出流和錯(cuò)誤輸出流中的信息定向?yàn)閷懭胛募校皇峭ㄟ^控制臺窗口輸出。定義這3個(gè)方法的語法格式如下。①publicstaticvoidsetIn(InputStreamis)。②publicstaticvoidsetout(PrintStreamps)。③publicstaticvoidsetErr(PrintStreamerr)。6.1應(yīng)用File類設(shè)計(jì)Java程序6.2應(yīng)用字節(jié)流設(shè)計(jì)Java程序6.4應(yīng)用字符流設(shè)計(jì)Java程序?qū)W習(xí)要點(diǎn)6.3應(yīng)用RandomAccessFile類設(shè)計(jì)Java程序任務(wù)6-1

創(chuàng)建文件對象并輸出文件屬性信息【任務(wù)描述】

在指定路徑下創(chuàng)建文件對象并輸出文件的屬性信息,如果指定的文件已存在,則輸出提示信息?!局R6-2】熟知File類通過I/O流可以實(shí)現(xiàn)對文件內(nèi)容的讀和寫,而要想獲得文件的屬性信息、重命名文件、刪除文件以及對系統(tǒng)文件夾進(jìn)行操作,則要使用File類來實(shí)現(xiàn)。File類是文件和文件夾的抽象表示,通過它可以實(shí)現(xiàn)對文件和文件夾的操作及管理。File類常用的構(gòu)造方法如下。publicFile(StringpathName)該構(gòu)造方法根據(jù)指定的路徑字符串pathName創(chuàng)建一個(gè)File對象。如果字符串pathName是實(shí)際存在的路徑,則File對象表示文件夾;如果pathName是文件名,則該File對象表示文件。publicFile(Stringpath,Stringchild)該構(gòu)造方法根據(jù)指定的路徑和文件名字符串創(chuàng)建一個(gè)File對象。publicFile(Fileparent,Stringchild)該構(gòu)造方法根據(jù)指定的父File對象以及子路徑字符串child創(chuàng)建一個(gè)File對象。任務(wù)6-1

創(chuàng)建文件對象并輸出文件屬性信息【知識6-2】熟知File類方法功能說明以下方法為獲取路徑名、文件夾名和文件名的操作方法publicStringgetName()獲取文件或文件夾的名稱,該名稱是路徑名的名稱序列中的最后一個(gè)名稱publicStringgetParent()如果File對象中沒有指定的父文件夾,則返回null;否則,返回父文件夾的路徑名字符串及子文件夾路徑名稱序列中最后一個(gè)名稱以前的所有路徑publicStringgetPath()獲取File對象所表示的路徑名的字符串publicStringgetAbsolutePath()獲取File對象所表示的絕對路徑名的字符串publicBooleanrenameTo(Filedest)當(dāng)File對象所表示的文件或文件夾重命名成功時(shí)返回true,否則返回false以下方法為獲取文件信息的操作方法publicbooleanisAbsolute()判斷File對象所表示的是否為絕對路徑名publicbooleancanRead()判斷File對象所表示的文件是否可讀publicbooleancanWrite()判斷File對象所表示的文件是否可寫publicbooleanexists()判斷File對象所表示的文件或文件夾是否存在publicbooleanisDirectory()判斷File對象所表示的是否為文件夾publicbooleanisFile()判斷File對象所表示的是否為文件publicbooleanisHidden如果File對象所表示的是隱藏文件或文件夾,則返回true,否則返回falsepubliclonglastModified獲取File對象所表示的文件或文件夾最后修改的時(shí)間,如果文件或文件夾不存在,則返回0Lpubliclonglength()獲取File對象所表示的文件或文件夾的長度(以字節(jié)為單位)以下方法為創(chuàng)建、刪除文件的操作方法publicbooleancreateNewFile()如果File對象所表示的文件不存在并成功創(chuàng)建,則返回true,否則返回falsepublicbooleandelete()刪除File對象所表示的文件或文件夾,文件夾必須為空才能刪除,刪除成功時(shí)返回true,否則返回falsepublicbooleandeleteOnExit()在JVM終止時(shí),刪除File對象所表示的文件或文件夾以下方法為文件夾的操作方法publicString[]list()返回File對象所表示的文件夾中的文件和文件夾名稱所組成的字符串?dāng)?shù)組publicbooleanmkdir()當(dāng)File對象所表示的文件夾創(chuàng)建成功時(shí)返回true,否則返回falseFile類中對文件和文件夾進(jìn)行操作及管理的主要方法如表6-11所示。表6-11

File類中對文件和文件夾進(jìn)行操作及管理的主要方法6.1應(yīng)用File類設(shè)計(jì)Java程序6.2應(yīng)用字節(jié)流設(shè)計(jì)Java程序6.4應(yīng)用字符流設(shè)計(jì)Java程序?qū)W習(xí)要點(diǎn)6.3應(yīng)用RandomAccessFile類設(shè)計(jì)Java程序任務(wù)6-2

使用FileInputStream類和FileOutputStream類實(shí)現(xiàn)文件復(fù)制

【任務(wù)描述】

使用FileInputStream類和FileOutputStream類實(shí)現(xiàn)文件復(fù)制,如果指定的文件夾不存在,則要求先創(chuàng)建相應(yīng)的文件夾。復(fù)制文件內(nèi)容時(shí),如果數(shù)據(jù)多于1024B,則一次讀取或?qū)懭?024B的數(shù)據(jù);如果剩余的數(shù)據(jù)少于1024B,則一位一位地讀取或?qū)懭霐?shù)據(jù)?!局R6-3】熟知FileInputStream類和FileOutputStream類FileInputStream類和FileOutputStream類負(fù)責(zé)文件的讀寫操作。FileInputStream類繼承自InputStream類,用于從文件中讀取字節(jié)數(shù)據(jù);FileOutputStream類繼承自O(shè)utputStream類,用于向文件中寫入字節(jié)數(shù)據(jù)。FileInputStream類常見的構(gòu)造方法如下。①publicFileInputStream(Stringname)。②publicFileInputStream(Filefile)。使用FileInputStream讀取源文件時(shí),如果沒有源文件指定路徑,則表示在系統(tǒng)當(dāng)前默認(rèn)文件夾中一定存在源文件。使用FileOutputStream將數(shù)據(jù)寫入目標(biāo)文件時(shí),如果目標(biāo)文件不存在,則系統(tǒng)會(huì)自動(dòng)創(chuàng)建目標(biāo)文件;如果目標(biāo)文件指定的路徑也不存在,則系統(tǒng)不會(huì)創(chuàng)建文件而是拋出FileNotFoundException異常。使用I/O流類時(shí)一定要注意處理異常。6.1應(yīng)用File類設(shè)計(jì)Java程序6.2應(yīng)用字節(jié)流設(shè)計(jì)Java程序6.4應(yīng)用字符流設(shè)計(jì)Java程序?qū)W習(xí)要點(diǎn)6.3應(yīng)用RandomAccessFile類設(shè)計(jì)Java程序任務(wù)6-3

使用FileReader類和FileWriter類實(shí)現(xiàn)文件復(fù)制

【任務(wù)描述】

使用FileReader類和FileWriter類實(shí)現(xiàn)文件復(fù)制,如果指定的文件夾不存在,則要求先創(chuàng)建相應(yīng)的文件夾?!局R6-4】熟知FileReader類和FileWriter類FileReader類和FileWriter類中的方法與FileInputStream類和FileOutputStream類中的方法的功能相同,二者的區(qū)別在于讀寫文件內(nèi)容時(shí)讀寫的單位不同,F(xiàn)ileReader類和FileWriter類以字符為單位,而FileInputStream類和FileOutputStream類以字節(jié)為單位。通常情況下,F(xiàn)ileReader類和FileWriter類用于讀寫文本文件。由于1個(gè)中文字符存儲(chǔ)時(shí)占2個(gè)字節(jié),使用FileInputStream類的read()方法以字節(jié)為單位讀取文本文件中的中文字符時(shí),如果只讀取中文字符編碼的1個(gè)字節(jié),則會(huì)輸出亂碼。使用FileReader類的read()方法以字符為單位讀取文本文件中的中文字符時(shí),可以正確地讀取1個(gè)中文字符。6.1應(yīng)用File類設(shè)計(jì)Java程序6.2應(yīng)用字節(jié)流設(shè)計(jì)Java程序6.4應(yīng)用字符流設(shè)計(jì)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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論