




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章
文件操作程序設計6.1應用File類設計Java程序6.2應用字節(jié)流設計Java程序6.4應用字符流設計Java程序學習要點6.3應用RandomAccessFile類設計Java程序
教學導航教學目標熟悉Java中流的分類,了解常用的字節(jié)流和字符流,了解常用的I/O流類學會應用File類設計Java程序學會應用字節(jié)流設計Java程序學會應用字符流設計Java程序學會應用RandomAccessFile類設計Java程序教學重點常用的I/O流類File類及其應用編程字節(jié)流和字符流及其應用編程RandomAccessFile類及其應用編程
身臨其境Windows操作系統(tǒng)自帶的【記事本】軟件如圖6-1所示,在【記事本】的編輯區(qū)域中可以實現(xiàn)輸入與修改文本內容、設置格式、保存文件、打開文件等操作?!百徺I京東自營商品,發(fā)票什么時候能送到?”的回答內容如圖6-2所示,可以將不同問題的回答內容存放在文本文件中,并根據(jù)需要動態(tài)展示在網(wǎng)頁中。圖6-1
Windows操作系統(tǒng)自帶的【記事本】軟件圖6-2“購買京東自營商品,發(fā)票什么時候能送到?”的回答內容
前導知識【知識6-1】認知Java流
為了讀取或輸出數(shù)據(jù),Java程序與數(shù)據(jù)發(fā)送者或接收者之間會建立一個數(shù)據(jù)通道,這個數(shù)據(jù)通道被抽象為流。輸入時通過流讀取數(shù)據(jù)源,可以打開一個通向程序的流,這個程序可以是文件、內存或網(wǎng)絡連接。類似地,輸出時通過流將數(shù)據(jù)寫入目的地,可以打開一個通向目的地的流。此時數(shù)據(jù)好像在流中流動一樣,流的示意如圖6-3所示,讀取數(shù)據(jù)時,對于程序來說是輸入,對應輸入流,將數(shù)據(jù)從數(shù)據(jù)源傳遞給程序;寫入數(shù)據(jù)時,對于程序來說是輸出,對應輸出流,將數(shù)據(jù)從程序傳遞到目的地,如內存或文件。輸入流只能讀,不能寫;而輸出流只能寫,不能讀。輸入流可以從鍵盤或文件中獲取數(shù)據(jù),此時鍵盤或文件是數(shù)據(jù)源;輸出流可以向顯示器屏幕、打印機或文件中傳輸數(shù)據(jù),此時顯示器屏幕、打印機和文件是目的地。從圖6-3可以看出,流是傳遞數(shù)據(jù)的載體,是數(shù)據(jù)經(jīng)歷的路徑。通過流,程序可以把數(shù)據(jù)從一個地方帶到另一個地方。流可以視為程序在數(shù)據(jù)發(fā)送者和數(shù)據(jù)接收者之間建立的數(shù)據(jù)通道。Java程序對各種流的處理基本相同,都包括打開流、讀取/寫入數(shù)據(jù)、關閉流等操作。就像水龍頭,需要水時,打開水龍頭,不需要水時,關閉水龍頭。流的設計使Java程序在處理不同I/O設備時非常方便。Java程序不直接操縱I/O設備,而是在程序和設備之間加入一個介質流。采用流的目的是使程序的輸入輸出操作獨立于具體設備,程序一旦建立了流,就可以不用考慮起點或終點的設備種類,而只關心使用的流。圖6-3
流的示意
前導知識【知識6-1】認知Java流
分類依據(jù)分類名稱說明常用類示例流的方向輸入流從數(shù)據(jù)源到程序的流,只能從該流中讀取數(shù)據(jù),不能向該流中寫數(shù)據(jù),如從鍵盤輸入數(shù)據(jù)InputStream、Reader輸出流從程序到目的地的流,只能把數(shù)據(jù)寫到該流中,不能從該流中讀取數(shù)據(jù),如在屏幕中輸出數(shù)據(jù)OutputStream、Writer所關聯(lián)的是否為最終數(shù)據(jù)源或目的地節(jié)點流直接與最終數(shù)據(jù)源或目的地關聯(lián)的流,該流只提供一些基本的讀寫方法FileInputStream、FileOutputStream、StringReader、StringWriter處理流不直接連接到最終數(shù)據(jù)源或目的地,而是對其他I/O流進行連接和封裝的流,該流提供一些功能比較強大的方法DataInputStream、BufferedInputStream、DataOutputStream、BufferedOutputStream流操作的數(shù)據(jù)基本單元字節(jié)流以字節(jié)為基本單位進行數(shù)據(jù)的I/O,可用于二進制數(shù)據(jù)的讀寫InputStream、OutputStream字符流以字符為基本單位進行數(shù)據(jù)的I/O,可用于文本數(shù)據(jù)的讀寫Reader、Writer表6-1Java中流的各種分類方式1.Java中流的分類Java中的流有多種分類方式,各種分類方式如表6-1所示。
前導知識【知識6-1】認知Java流2.字節(jié)流字節(jié)流以字節(jié)為基本單位處理數(shù)據(jù),InputStream類和OutputStream類是字節(jié)流的兩個頂層父類,提供了輸入流類和輸出流類的通用應用程序接口(ApplicationProgramInterface,API),輸入流類和輸出流類提供的方法都以字節(jié)為單位讀寫數(shù)據(jù)。抽象類InputStream是所有字節(jié)輸入流的父類,該類中定義了讀取字節(jié)數(shù)據(jù)的基本方法,InputStream類中常用的方法如表6-2所示。抽象類OutputStream是所有字節(jié)輸出流的父類,該類中定義了輸出字節(jié)數(shù)據(jù)的基本方法,OutputStream類中常用的方法如表6-3所示。方法功能說明publicabstractintread()從輸入流中讀取一個字節(jié)作為方法的返回值,如果返回值為-1,則表示到達流的末尾publicintread(byte[]b)將讀取的數(shù)據(jù)保存在一個字節(jié)數(shù)組中,并返回讀取的字節(jié)數(shù)publiclongskip(longn)在輸入流中最多跳過n個字節(jié),返回跳過的字節(jié)數(shù)publicintavailable()返回輸入流中可以不受阻塞地讀取的字節(jié)數(shù)publicvoidmark(intbMax)標記當前位置,參數(shù)用于設置從標記位置開始可以讀取的最大字節(jié)數(shù)publicvoidreset()將輸入流重新定位到最后一次mark()方法標記的位置publicvoidclose()關閉輸入流,釋放與該流關聯(lián)的所有系統(tǒng)資源方法功能說明publicabstractvoidwrite(intb)將指定長度的數(shù)據(jù)寫入輸出流publicvoidwrite(byte[]b)將字節(jié)數(shù)組的內容寫入輸出流publicvoidwrite(byte[]b,intoff,intlen)將字節(jié)數(shù)組b中從off位置開始的len個字節(jié)寫入輸出流publicvoidflush()刷新輸出流,并強制將緩沖區(qū)的全部字節(jié)寫入輸出流publicvoidclose()關閉輸出流,并釋放與該流關聯(lián)的所有系統(tǒng)資源表6-2
InputStream類中常用的方法表6-3
OutputStream類中常用的方法
前導知識【知識6-1】認知Java流3.字符流字符流以字符為基本單位處理數(shù)據(jù),Reader類和Writer類是字符的兩個頂層抽象父類,其定義了在I/O流中讀寫字符數(shù)據(jù)的通用API。字符流能夠處理Unicode字符集中的所有字符。抽象類Reader是所有字符輸入流的父類,該類中定義了讀取字符數(shù)據(jù)的基本方法,Reader類中常用的方法如表6-4所示。抽象類Writer是所有字符輸出流的父類,該類中定義了寫入字符數(shù)據(jù)的基本方法,Writer類中常用的方法如表6-5所示。表6-4Reader類中常用的方法方法功能說明publicintread()讀取一個字符作為方法的返回值,如果返回值為-1,則表示到達流的末尾publicintread(char[]c)將讀取的數(shù)據(jù)保存在一個字符數(shù)組中,并返回讀取的字符數(shù)publiclongskip(longn)在輸入流中最多跳過n個字符,返回跳過的字符數(shù)publicvoidmark(intcMax)標記當前位置,參數(shù)用于設置從標記位置開始可以讀取的最大字符數(shù)publicvoidreset()將輸入流重新定位到最后一次mark()方法標記的位置publicvoidclose()關閉輸入流,釋放與該流關聯(lián)的所有系統(tǒng)資源方法功能說明publicvoidwrite(intc)將指定長度的數(shù)據(jù)寫入輸出流publicvoidwrite(char[]c)將字符數(shù)組的內容寫入輸出流publicabstractvoidwrite(char[]c,intoff,intlen)將字符數(shù)組c中從偏移量off開始的len個字符寫入輸出流publicvoidwrite(Stringstr)將字符串str中的全部字符寫入輸出流publicvoidwrite(Stringstr,intoff,intlen)將字符串str中從偏移量off開始的len個字符寫入輸出流publicvoidflush()刷新輸出流,并強制將緩沖區(qū)的全部字符寫入輸出流publicvoidclose()關閉輸出流,并釋放與該流關聯(lián)的所有系統(tǒng)資源表6-5
Writer類中常用的方法
前導知識【知識6-1】認知Java流4.I/O流的套接在Java程序中,通過節(jié)點流可以直接讀取數(shù)據(jù)源中的數(shù)據(jù),或者將數(shù)據(jù)直接寫到目的地中。節(jié)點流可以直接與數(shù)據(jù)源或目的地關聯(lián),它提供了基本的數(shù)據(jù)讀寫方法。在使用節(jié)點流FileInputStream和FileOutputStream對文件進行讀寫時,每次讀寫字節(jié)數(shù)據(jù)都要對文件進行操作。為了提高讀寫效率,避免多次對文件進行操作,Java提供了讀寫字節(jié)數(shù)據(jù)的節(jié)點流BufferedInputStream和BufferedOutputStream。使用節(jié)點流FileInputStream和FileOutputStream讀寫數(shù)據(jù)時,只能以字節(jié)為單位。為了增強讀寫功能,Java提供了DataInputStream類和DataOutputStream類來實現(xiàn)按數(shù)據(jù)類型讀寫數(shù)據(jù)。因此,根據(jù)系統(tǒng)的實際需求選擇合適的處理流可以提高讀寫效率并增強讀寫能力。在Java程序中,通常將節(jié)點流與處理流有機結合起來使用。因為處理流不直接與數(shù)據(jù)源或目的地關聯(lián),所以可以將節(jié)點流作為參數(shù)來構造處理流,即處理流對節(jié)點流進行了一次封裝。處理流還可以作為參數(shù)來構造其他處理流,從而形成了處理流對節(jié)點流或其他處理流的進一步封裝,這就是I/O流的套接。以下代碼是I/O流套接的示例。InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);在System類中,靜態(tài)成員in是系統(tǒng)輸入流,類型為InputStream,在Java程序運行時系統(tǒng)會自動提供。默認情況下,系統(tǒng)輸入流會連接鍵盤,所以通過System.in可以讀取鍵盤輸入。System.in的類型為InputStream,可以直接讀取鍵盤輸入,屬于節(jié)點流,以上示例中第1條語句將其作為參數(shù)封裝在處理流InputStreamReader中,從而形成I/O流的套接,并將InputStream由字節(jié)流轉換成字符流;第2條語句將轉換后的字符流作為參數(shù)封裝在處理流BufferedReader中,從而形成I/O流的再次套接,并將字符流轉換為緩沖字符流。節(jié)點流是以物理I/O節(jié)點作為構造方法的參數(shù),處理流構造方法的參數(shù)不是物理節(jié)點而是已經(jīng)存在的節(jié)點流或處理流。通過處理流來封裝節(jié)點流可以隱藏底層設備節(jié)點的差異,使節(jié)點流完成與硬件設備的交互,處理流則提供更加方便的I/O方法。
前導知識【知識6-1】認知Java流5.常用的I/O流java.io包中常用的節(jié)點流如表6-6所示,java.io包中常用的處理流如表6-7所示。訪問對象字節(jié)輸入流字節(jié)輸出流字符輸入流字符輸出流文件FileInputStreamFileOutputStreamFileReaderFileWriter字符串--StringReaderStringWriter內存數(shù)組ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter流的類型字節(jié)輸入流字節(jié)輸出流字符輸入流字符輸出流頂層父類InputStreamOutputStreamReaderWriter緩沖流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter過濾流FilterInputStreamFilterOutputStreamFilterReaderFilterWriter數(shù)據(jù)流DataInputStreamDataOutputStream--對象流ObjectInputStreamObjectOutputStream--轉換流--InputStreamReaderOutputStreamWriter打印流-PrintStream-PrintWriter表6-6
java.io包中常用的節(jié)點流表6-7
java.io包中常用的處理流
前導知識【知識6-1】認知Java流5.常用的I/O流InputStream、OutputStream、Reader、Writer這4個類都是抽象類,無法用來創(chuàng)建對象,必須使用它們的子類覆蓋其抽象方法,從而創(chuàng)建對象。(1)文件流文件流是一種節(jié)點流,包括FileInputStream類、FileOutputStream類、FileReader類和FileWriter類,是對文件進行讀或寫的類。文件流的構造方法經(jīng)常以字符串形式的文件名或者一個File類的對象作為參數(shù)。(2)緩沖流硬盤、鍵盤、打印機等硬件設備讀寫數(shù)據(jù)的速度遠遠小于內存讀寫數(shù)據(jù)的速度,為了減少硬件設備的讀寫次數(shù),通常利用緩沖流從硬件設備中一次性讀寫一定長度的數(shù)據(jù),以提高系統(tǒng)的讀寫性能和傳輸效率。緩沖流實現(xiàn)了對基本I/O流的封裝并創(chuàng)建了內部緩沖區(qū)。緩沖區(qū)是專門用于存儲數(shù)據(jù)的一塊內存空間,用于硬件設備與內存之間讀/寫數(shù)據(jù),以提高系統(tǒng)讀寫數(shù)據(jù)的性能。輸入時,輸入流一次性讀取一定長度的數(shù)據(jù)到緩沖區(qū),緩沖流通過緩沖區(qū)來讀取數(shù)據(jù)。當從一個緩沖流讀取數(shù)據(jù)時,實際是從緩沖區(qū)中讀取數(shù)據(jù),當緩沖區(qū)為空時,系統(tǒng)將從相應設備自動讀取數(shù)據(jù),并讀取盡可能多的數(shù)據(jù)充滿緩沖區(qū)。輸出時,緩沖流將數(shù)據(jù)寫入緩沖區(qū),輸出流將緩沖區(qū)的數(shù)據(jù)一次性輸出。向一個緩沖流寫入數(shù)據(jù)時,系統(tǒng)將數(shù)據(jù)發(fā)送到緩沖區(qū),而不是直接發(fā)送到外部設備,緩沖區(qū)自動記錄數(shù)據(jù),當緩沖區(qū)滿時,系統(tǒng)將數(shù)據(jù)全部發(fā)送到外部設備。
前導知識【知識6-1】認知Java流5.常用的I/O流緩沖流包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter這4個類,它們的功能都是對輸入輸出流進行緩沖,把數(shù)據(jù)從原始流成塊地讀入或者把數(shù)據(jù)積累成一個大數(shù)據(jù)塊后再成批寫出,通過減少系統(tǒng)資源的讀寫次數(shù)來加快程序的執(zhí)行。創(chuàng)建緩沖流時就創(chuàng)建了一個內部緩沖數(shù)組,緩沖流的4個類的構造方法如表6-8所示。BufferedInputStream和BufferedOutputStream實現(xiàn)了對InputStream和OutputStream的封裝,并創(chuàng)建了內部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字節(jié);BufferedReader和BufferedWriter實現(xiàn)了對Reader和Writer的封裝,并創(chuàng)建了內部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字符。緩沖流類型構造方法字節(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個類的構造方法
前導知識【知識6-1】認知Java流5.常用的I/O流緩沖流包括BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter這4個類,它們的功能都是對輸入輸出流進行緩沖,把數(shù)據(jù)從原始流成塊地讀入或者把數(shù)據(jù)積累成一個大數(shù)據(jù)塊后再成批寫出,通過減少系統(tǒng)資源的讀寫次數(shù)來加快程序的執(zhí)行。創(chuàng)建緩沖流時就創(chuàng)建了一個內部緩沖數(shù)組,緩沖流的4個類的構造方法如表6-8所示。BufferedInputStream和BufferedOutputStream實現(xiàn)了對InputStream和OutputStream的封裝,并創(chuàng)建了內部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字節(jié);BufferedReader和BufferedWriter實現(xiàn)了對Reader和Writer的封裝,并創(chuàng)建了內部緩沖數(shù)組,其讀寫數(shù)據(jù)的基本單位為字符。BufferedReader類增加了方法publicStringreadLine(),用于讀取一個文本行并返回該行的字符串,如果已到達字符流的末尾,則返回null。BufferedWriter類增加了方法publicvoidnewLine(),用于寫入一個行分隔符。緩沖流類型構造方法字節(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個類的構造方法
前導知識【知識6-1】認知Java流5.常用的I/O流(3)數(shù)據(jù)流數(shù)據(jù)流包括數(shù)據(jù)輸入流DataInputStream類和數(shù)據(jù)輸出流DataOutputStream類,它們允許按Java的基本數(shù)據(jù)類型讀寫數(shù)據(jù)流中的數(shù)據(jù)。數(shù)據(jù)輸入流以一種與機器無關的方式讀取Java基本數(shù)據(jù)類型,并使用UTF-8修改版格式編碼的字符串。定義DataInputStream類的語法格式如下,該類為FilterInputStream類的子類,并且實現(xiàn)了DataInput接口。publicclassDataInputStreamextendsFilterInputStreamimplementsDataInputDataInputStream類的構造方法為publicDataInputStream(InputStreamis)。DataInputStream類中除了具有InputStream類中字節(jié)數(shù)據(jù)的讀取方法read()以外,還具有DataInput接口中Java基本數(shù)據(jù)類型以及字符串數(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修改版格式編碼的字符串
前導知識【知識6-1】認知Java流5.常用的I/O流數(shù)據(jù)輸出流DataOutputStream將Java基本數(shù)據(jù)類型以及使用UTF-8修改版格式編碼的字符串寫入輸出流。定義DataOutputStream類的語法格式如下,該類為FilterOutputStream類的子類,并且實現(xiàn)了DataOutput接口。publicclassDataOutputStreamextendsFilterOutputStreamimplementsDataOutputDataOutputStream類的構造方法為publicDataOutputStream(OutputStreamos)。DataOutputStream類中除了具有OutputStream類中字節(jié)數(shù)據(jù)的寫入方法write()以外,還具有DataOutput接口中Java基本數(shù)據(jù)類型以及字符串數(shù)據(jù)的寫入方法。DataOutputStream類中寫入數(shù)據(jù)的方法如表6-10所示。DataInputStream類和DataOutputStream類應配對使用完成數(shù)據(jù)讀寫,且讀取數(shù)據(jù)類型的順序要與寫入數(shù)據(jù)類型的順序完全相同。I/O流使用完畢后應當關閉,關閉處理流時,系統(tǒng)會自動關閉處理流封裝的節(jié)點流。方法功能說明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ù)的方法
前導知識【知識6-1】認知Java流(4)轉換流在使用字節(jié)流InputStream和OutputStream處理數(shù)據(jù)時,通過InputStreamReader類和OutputStreamWriter類的封裝可以實現(xiàn)字符數(shù)據(jù)處理功能。InputStreamReader類是Reader類的子類,是字節(jié)流通向字符流的“橋梁”,它使用平臺默認字符集或指定字符集讀取字節(jié)并將其解碼為字符;OutputStreamWriter類是Writer類的子類,是字符流通向字節(jié)流的“橋梁”,它使用平臺默認字符集或指定字符集將字符編碼為字節(jié)后輸出。InputStreamReader類的構造方法如下。①publicInputStreamReader(InputStreamis)。②publicInputStreamReader(InputStreamis,StringcharsetName)。OutputStreamWriter類的構造方法如下。①publicOutputStreamWriter(OutputStreamos)。②publicOutputStreamWriter(OutputStreamos,StringcharsetName)。
前導知識【知識6-1】認知Java流(5)打印流PrintStream類和PrintWriter類都是打印流,它們在許多方面提供了相似的功能,例如,它們可以將各種基本數(shù)據(jù)類型的數(shù)據(jù)輸出到字符串流中,并提供自動刷新功能。這兩個類的不同點在于自動刷新功能的設定,PrintStream會在調用println()方法或輸出包含換行符(\n)的字符串時自動刷新,而PrintWriter僅在調用println()方法時自動刷新。PrintStream類封裝了OutputStream,它可以使用print()和println()兩個方法輸出Java中所有基本類型和引用類型的數(shù)據(jù)。與其他的類有所不同,PrintStream不會拋出IOException異常,而是在發(fā)生IOException異常時將其內部錯誤狀態(tài)設置為true,并使用checkError()方法進行檢測。PrintStream類的構造方法如下。①publicPrintStream(OutputStreamos)。②pubicPrintStream(Stringfilename)。③publicPrintStream(Filefile)。PrintWriter類除了可以封裝Writer之外,還可以封裝OutputStream,可以使用print()和println()兩個方法完成各種類型數(shù)據(jù)的輸出。PrintWriter的構造方法如下。①publicPrintWriter(Writerwrite)。②publicPrintWriter(OutputStreamos)。③publicPrintWriter(Stringfilename)。④publicPrintWriter(Filefile)。
前導知識【知識6-1】認知Java流(6)標準I/O流標準I/O流的功能是通過Java的System類實現(xiàn)的,System類在java.lang包中定義,是一個公共最終類,不能被繼承,也不能被實例化,可以在程序中直接調用。System類中,定義了標準輸入流對象in、標準輸出流對象out、標準錯誤輸出流對象err。標準流對象在Java程序運行時會自動提供;標準輸入流對象將會讀取鍵盤的輸入;標準輸出流對象將數(shù)據(jù)在控制臺窗口中輸出;標準錯誤流對象將錯誤信息在控制臺窗口中輸出。定義這3個標準流對象的語法格式如下。①publicstaticfinalInputStreamin。②publicstaticfinalPrintStreamout。③publicstaticfinalPrintStreamerr。System類提供了3個用于重定向標準I/O流的方法,既可以將從鍵盤輸入數(shù)據(jù)定向為從已有的文件中輸入數(shù)據(jù),也可以將輸出流和錯誤輸出流中的信息定向為寫入文件中,而不是通過控制臺窗口輸出。定義這3個方法的語法格式如下。①publicstaticvoidsetIn(InputStreamis)。②publicstaticvoidsetout(PrintStreamps)。③publicstaticvoidsetErr(PrintStreamerr)。6.1應用File類設計Java程序6.2應用字節(jié)流設計Java程序6.4應用字符流設計Java程序學習要點6.3應用RandomAccessFile類設計Java程序任務6-1
創(chuàng)建文件對象并輸出文件屬性信息【任務描述】
在指定路徑下創(chuàng)建文件對象并輸出文件的屬性信息,如果指定的文件已存在,則輸出提示信息。【知識6-2】熟知File類通過I/O流可以實現(xiàn)對文件內容的讀和寫,而要想獲得文件的屬性信息、重命名文件、刪除文件以及對系統(tǒng)文件夾進行操作,則要使用File類來實現(xiàn)。File類是文件和文件夾的抽象表示,通過它可以實現(xiàn)對文件和文件夾的操作及管理。File類常用的構造方法如下。publicFile(StringpathName)該構造方法根據(jù)指定的路徑字符串pathName創(chuàng)建一個File對象。如果字符串pathName是實際存在的路徑,則File對象表示文件夾;如果pathName是文件名,則該File對象表示文件。publicFile(Stringpath,Stringchild)該構造方法根據(jù)指定的路徑和文件名字符串創(chuàng)建一個File對象。publicFile(Fileparent,Stringchild)該構造方法根據(jù)指定的父File對象以及子路徑字符串child創(chuàng)建一個File對象。任務6-1
創(chuàng)建文件對象并輸出文件屬性信息【知識6-2】熟知File類方法功能說明以下方法為獲取路徑名、文件夾名和文件名的操作方法publicStringgetName()獲取文件或文件夾的名稱,該名稱是路徑名的名稱序列中的最后一個名稱publicStringgetParent()如果File對象中沒有指定的父文件夾,則返回null;否則,返回父文件夾的路徑名字符串及子文件夾路徑名稱序列中最后一個名稱以前的所有路徑publicStringgetPath()獲取File對象所表示的路徑名的字符串publicStringgetAbsolutePath()獲取File對象所表示的絕對路徑名的字符串publicBooleanrenameTo(Filedest)當File對象所表示的文件或文件夾重命名成功時返回true,否則返回false以下方法為獲取文件信息的操作方法publicbooleanisAbsolute()判斷File對象所表示的是否為絕對路徑名publicbooleancanRead()判斷File對象所表示的文件是否可讀publicbooleancanWrite()判斷File對象所表示的文件是否可寫publicbooleanexists()判斷File對象所表示的文件或文件夾是否存在publicbooleanisDirectory()判斷File對象所表示的是否為文件夾publicbooleanisFile()判斷File對象所表示的是否為文件publicbooleanisHidden如果File對象所表示的是隱藏文件或文件夾,則返回true,否則返回falsepubliclonglastModified獲取File對象所表示的文件或文件夾最后修改的時間,如果文件或文件夾不存在,則返回0Lpubliclonglength()獲取File對象所表示的文件或文件夾的長度(以字節(jié)為單位)以下方法為創(chuàng)建、刪除文件的操作方法publicbooleancreateNewFile()如果File對象所表示的文件不存在并成功創(chuàng)建,則返回true,否則返回falsepublicbooleandelete()刪除File對象所表示的文件或文件夾,文件夾必須為空才能刪除,刪除成功時返回true,否則返回falsepublicbooleandeleteOnExit()在JVM終止時,刪除File對象所表示的文件或文件夾以下方法為文件夾的操作方法publicString[]list()返回File對象所表示的文件夾中的文件和文件夾名稱所組成的字符串數(shù)組publicbooleanmkdir()當File對象所表示的文件夾創(chuàng)建成功時返回true,否則返回falseFile類中對文件和文件夾進行操作及管理的主要方法如表6-11所示。表6-11
File類中對文件和文件夾進行操作及管理的主要方法6.1應用File類設計Java程序6.2應用字節(jié)流設計Java程序6.4應用字符流設計Java程序學習要點6.3應用RandomAccessFile類設計Java程序任務6-2
使用FileInputStream類和FileOutputStream類實現(xiàn)文件復制
【任務描述】
使用FileInputStream類和FileOutputStream類實現(xiàn)文件復制,如果指定的文件夾不存在,則要求先創(chuàng)建相應的文件夾。復制文件內容時,如果數(shù)據(jù)多于1024B,則一次讀取或寫入1024B的數(shù)據(jù);如果剩余的數(shù)據(jù)少于1024B,則一位一位地讀取或寫入數(shù)據(jù)?!局R6-3】熟知FileInputStream類和FileOutputStream類FileInputStream類和FileOutputStream類負責文件的讀寫操作。FileInputStream類繼承自InputStream類,用于從文件中讀取字節(jié)數(shù)據(jù);FileOutputStream類繼承自OutputStream類,用于向文件中寫入字節(jié)數(shù)據(jù)。FileInputStream類常見的構造方法如下。①publicFileInputStream(Stringname)。②publicFileInputStream(Filefile)。使用FileInputStream讀取源文件時,如果沒有源文件指定路徑,則表示在系統(tǒng)當前默認文件夾中一定存在源文件。使用FileOutputStream將數(shù)據(jù)寫入目標文件時,如果目標文件不存在,則系統(tǒng)會自動創(chuàng)建目標文件;如果目標文件指定的路徑也不存在,則系統(tǒng)不會創(chuàng)建文件而是拋出FileNotFoundException異常。使用I/O流類時一定要注意處理異常。6.1應用File類設計Java程序6.2應用字節(jié)流設計Java程序6.4應用字符流設計Java程序學習要點6.3應用RandomAccessFile類設計Java程序任務6-3
使用FileReader類和FileWriter類實現(xiàn)文件復制
【任務描述】
使用FileReader類和FileWriter類實現(xiàn)文件復制,如果指定的文件夾不存在,則要求先創(chuàng)建相應的文件夾。【知識6-4】熟知FileReader類和FileWriter類FileReader類和FileWriter類中的方法與FileInputStream類和FileOutputStream類中的方法的功能相同,二者的區(qū)別在于讀寫文件內容時讀寫的單位不同,F(xiàn)ileReader類和FileWriter類以字符為單位,而FileInputStream類和FileOutputStream類以字節(jié)為單位。通常情況下,F(xiàn)ileReader類和FileWriter類用于讀寫文本文件。由于1個中文字符存儲時占2個字節(jié),使用FileInputStream類的read()方法以字節(jié)為單位讀取文本文件中的中文字符時,如果只讀取中文字符編碼的1個字節(jié),則會輸出亂碼。使用FileReader類的read()方法以字符為單位讀取文本文件中的中文字符時,可以正確地讀取1個中文字符。6.1應用File類設計Java程序6.2應用字節(jié)流設計Java程序6.4應用字符流設計Java程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧軌道交通職業(yè)學院《分子生物學4》2023-2024學年第二學期期末試卷
- 濟南2025年山東濟南市鋼城區(qū)所屬事業(yè)單位招聘初級綜合類崗位26人筆試歷年參考題庫附帶答案詳解-1
- 綿陽飛行職業(yè)學院《消化系統(tǒng)疾病》2023-2024學年第二學期期末試卷
- 成都醫(yī)學院《DesignofStructures》2023-2024學年第二學期期末試卷
- 青島電影學院《作物育種學總論》2023-2024學年第二學期期末試卷
- 河源廣東河源市消防救援支隊2025年第一批政府專職消防員招聘86人筆試歷年參考題庫附帶答案詳解
- 動物炭黑、動物膠及其衍生物項目效益評估報告
- 沈陽工業(yè)大學《藥用作物栽培學》2023-2024學年第二學期期末試卷
- 2025屆高考語文補充背誦詩詞:《青玉案·元夕》教學設計
- 南京視覺藝術職業(yè)學院《Java應用設計案例》2023-2024學年第二學期期末試卷
- 江蘇省招標中心有限公司招聘筆試沖刺題2025
- 2024年防盜門銷售合同范本
- 支付令申請書(2025版)
- 麻醉護士的 工作職責
- 2025年中考語文一輪復習:九年級下冊知識點梳理
- 旅游健康與保健知識
- 亞朵酒店前臺述職報告
- 《肝衰竭診治指南(2024版)》解讀
- 數(shù)據(jù)安全重要數(shù)據(jù)風險評估報告
- 孝悌課件教學課件
- 《期末總結》課件
評論
0/150
提交評論