Java應(yīng)用開(kāi)發(fā)與實(shí)踐-IO操作_第1頁(yè)
Java應(yīng)用開(kāi)發(fā)與實(shí)踐-IO操作_第2頁(yè)
Java應(yīng)用開(kāi)發(fā)與實(shí)踐-IO操作_第3頁(yè)
Java應(yīng)用開(kāi)發(fā)與實(shí)踐-IO操作_第4頁(yè)
Java應(yīng)用開(kāi)發(fā)與實(shí)踐-IO操作_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

I/O操作Java應(yīng)用開(kāi)發(fā)與實(shí)踐

酒店管理系統(tǒng)的設(shè)計(jì)學(xué)習(xí)目標(biāo)理解I/O流與文件的概念掌握創(chuàng)建流與文件的方法理解輸入/輸出流的概念理解字節(jié)流/字符流的概念了解ZIP壓縮輸入/輸出流11.1I/O流與文件11.2輸入/輸出流11.3字節(jié)流11.4字符流11.5ZIP壓縮輸入/輸出流11.6實(shí)訓(xùn)11輸入輸出流的應(yīng)用目錄11.1I/O流與文件I/O(Input/Output)即輸入/輸出,指信號(hào)或數(shù)據(jù)在計(jì)算器的內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器或其它周邊設(shè)備之間的傳遞。Java的I/O是實(shí)現(xiàn)輸入和輸出的基礎(chǔ),可以方便的實(shí)現(xiàn)各種數(shù)據(jù)的輸入和輸出操作。在Java中把不同的輸入/輸出源如鍵盤(pán)、文件、網(wǎng)絡(luò)連接等抽象表述為“流”(stream)。通過(guò)流的形式允許Java程序使用相同的方式來(lái)訪問(wèn)不同的輸入/輸出源。11.1.1I/O流的概念和分類11.1I/O流與文件I/O的形式分為下面四種,本章討論第一種,文件的讀/寫(xiě)。文件(File)讀/寫(xiě),以文件為讀/寫(xiě)對(duì)象??刂婆_(tái)(console,如DOS窗口)。例如打印到顯示器/鍵盤(pán)讀入。網(wǎng)絡(luò)接口(TCP/UDP端口)讀/寫(xiě),例如,網(wǎng)上沖浪、網(wǎng)絡(luò)聊天、郵件發(fā)送。程序(線程)間通信,例如,數(shù)據(jù)傳輸。11.1.1I/O流的概念和分類11.1I/O流與文件Java語(yǔ)言采用流的機(jī)制來(lái)實(shí)現(xiàn)輸入/輸出。流就是一個(gè)傳送有序的字節(jié)序列。我們可以把它想象成為一個(gè)數(shù)據(jù)節(jié)點(diǎn)和程序之間建立起來(lái)的連接通道上的字節(jié)序列。流就是對(duì)輸入數(shù)據(jù)源和輸出目的地的抽象表示。11.1.1I/O流的概念和分類11.1I/O流與文件輸入流:程序在內(nèi)存中運(yùn)行,文件在磁盤(pán)上,把文件從磁盤(pán)上讀入內(nèi)存中來(lái),這個(gè)方向的流稱為輸入流。輸出流:把內(nèi)存中的數(shù)據(jù)寫(xiě)到磁盤(pán)上的文件,這個(gè)方向的流稱為輸出流。字節(jié)流:用于讀寫(xiě)二進(jìn)制文件及其他任何類型文件,以byte為單位傳輸。字符流:用于讀寫(xiě)文本文件,以字符為單位傳輸。不能操作二進(jìn)制文件。11.1.1I/O流的概念和分類11.1I/O流與文件應(yīng)用程序中經(jīng)常需要從外部的文件中讀取信息和向外部文件寫(xiě)出數(shù)據(jù)進(jìn)行保存,就需要?jiǎng)?chuàng)建File類的對(duì)象——文件。Java中的File類是文件和目錄路徑名的抽象形式。File類是java.io包中唯一代表磁盤(pán)文件本身的對(duì)象。File類定義了一些與平臺(tái)無(wú)關(guān)的方法來(lái)操作文件。File類主要用于文件和目錄的創(chuàng)建、文件的查找和文件的刪除等。11.1.2File類11.1I/O流與文件

//創(chuàng)建文件對(duì)象file1,參數(shù)是文件所在路徑Filefile1=newFile("d:\\myDoc\\first.txt");if(file1.exists())//判斷是否是文件

System.out.println("文件"+file1.getName()+"已經(jīng)存在");else{ System.out.println("文件"+file1.getName()+"不存在");} 11.1.2File類11.1I/O流與文件創(chuàng)建一個(gè)文件對(duì)象,不管這個(gè)文件是否存在于文件系統(tǒng)中,都必須使用File類先實(shí)例化這個(gè)文件對(duì)象,即使它是一個(gè)并不存在的文件。Filefile1=newFile("d:\\myDoc\\first.txt");Filefile2=newFile("d:\\myDoc\\second.txt");if(file1.exists())//判斷是否是文件

System.out.println("文件"+file1.getName()+"已經(jīng)存在");else{ try{//這里需要處理異常

file1.createNewFile(); }catch(IOExceptione){ e.printStackTrace(); }}11.1.3文件的創(chuàng)建與刪除11.1I/O流與文件File類有很多的方法,可以得到文件本身的屬性,如getName()方法獲得文件名、length()方法獲得文件長(zhǎng)度、getAbsolutePath()方法獲得文件路徑等。System.out.println("文件"+file1.getName()+"的地址是:"+file1.getAbsolutePath());System.out.println("文件"+file1.getName()+"的長(zhǎng)度是:"+file1.length());System.out.println("文件"+file2.getName()+"的地址是:"+file2.getAbsolutePath());System.out.println("文件"+file2.getName()+"的長(zhǎng)度是:"+file2.length());11.1.4獲取文件信息11.2輸入/輸出流把文件從磁盤(pán)上讀入內(nèi)存中的流稱為輸入流,輸入流連接的數(shù)據(jù)源可以是任何串行數(shù)據(jù)源,如磁盤(pán)文件、網(wǎng)絡(luò)另一端的信息發(fā)送程序、鍵盤(pán)等。11.2.1輸入流11.2輸入/輸出流把內(nèi)存中的數(shù)據(jù)寫(xiě)到磁盤(pán)上的文件,該流被稱為輸出流。輸出流可以連接硬盤(pán)上的文件、網(wǎng)絡(luò)上的另一端等任何可以接收字節(jié)序列的設(shè)備。11.2.2輸出流11.3字節(jié)流1.抽象字節(jié)輸入流InputStreamInputStream類(字節(jié)輸入流)是所有字節(jié)輸入流的抽象父類,它的所有子類繼承自InputStream,它本身并不能創(chuàng)建實(shí)例來(lái)執(zhí)行輸入,但它將成為所有輸入流的模板,所以它的方法是所有輸入流都可使用的方法。InputStream流及其子類都是向程序中輸入數(shù)據(jù)的,且數(shù)據(jù)單位為字節(jié)(8bit)。11.3.1抽象字節(jié)流InputStream和OutputStream11.3字節(jié)流2.抽象字節(jié)輸出流OutputStreamOutputStream類(字節(jié)輸出流)是所有字節(jié)輸出流的抽象父類,它本身并不能創(chuàng)建實(shí)例來(lái)執(zhí)行輸出,但它將成為所有輸出流的模板,所以它的方法是所有輸出流都可使用的方法。11.3.1抽象字節(jié)流InputStream和OutputStream11.3字節(jié)流1.字節(jié)文件輸入流FileInputStreamFileInputStream可以使用read()方法一次讀入一個(gè)字節(jié),并以int類型返回,或者是使用read()方法時(shí)讀入至一個(gè)byte數(shù)組,byte數(shù)組的元素有多少個(gè),就讀入多少個(gè)字節(jié)。在將整個(gè)文件讀取完成或?qū)懭胪戤叺倪^(guò)程中,這么一個(gè)byte數(shù)組通常被當(dāng)作緩沖區(qū),起著緩存數(shù)據(jù)的中間角色的作用。2.字節(jié)文件輸出流FileOutputStreamFileOutputStream是用來(lái)處理以文件作為數(shù)據(jù)輸出目的數(shù)據(jù)流,或者說(shuō)是從內(nèi)存區(qū)讀數(shù)據(jù)到文件。FileOutputStream類用來(lái)處理以文件作為數(shù)據(jù)輸出目的數(shù)據(jù)流。11.3.2字節(jié)文件流FileInputStream和FileOutputStream11.3字節(jié)流為了減少訪問(wèn)外存的次數(shù),應(yīng)該在一次對(duì)外設(shè)的訪問(wèn)中,讀寫(xiě)更多的數(shù)據(jù)。為此,除了程序和流節(jié)點(diǎn)間交換數(shù)據(jù)必需的讀寫(xiě)機(jī)制外,還應(yīng)該增加緩沖機(jī)制。緩沖流就是每一個(gè)數(shù)據(jù)流分配一個(gè)緩沖區(qū),一個(gè)緩沖區(qū)就是一個(gè)臨時(shí)存儲(chǔ)數(shù)據(jù)的內(nèi)存。這樣可以減少訪問(wèn)硬盤(pán)的次數(shù),提高傳輸效率。字節(jié)緩沖輸入流BufferedInputStream的作用是當(dāng)向緩沖流寫(xiě)入數(shù)據(jù)時(shí)候,數(shù)據(jù)先寫(xiě)到緩沖區(qū),待緩沖區(qū)寫(xiě)滿后,系統(tǒng)一次性將數(shù)據(jù)發(fā)送給輸出設(shè)備。字節(jié)緩沖輸出流BufferedOutputStream的作用是當(dāng)從向緩沖流讀取數(shù)據(jù)時(shí)候,系統(tǒng)先從緩沖區(qū)讀出數(shù)據(jù),待緩沖區(qū)為空時(shí),系統(tǒng)再?gòu)妮斎朐O(shè)備讀取數(shù)據(jù)到緩沖區(qū)。11.3.3字節(jié)緩沖流BufferedInputStream和BufferedOutputStream11.3字節(jié)流將文件讀入內(nèi)存,需要將BufferedInputStream與FileInputStream相結(jié)合,語(yǔ)法格式如下:FileInputStreamfis=newFileInputStream("abc.txt");BufferedInputStreambis=newBufferedInputStream(fis);將內(nèi)存寫(xiě)入文件,需要將BufferedOutputStream與FileOutputStream相結(jié)合,語(yǔ)法格式如下:FileOutputStreamfos=newFileOutputStream("abc.txt");BufferedOutputStreambos=newBufferedInputStream(fos);將鍵盤(pán)輸入流讀到內(nèi)存,需要將BufferedReader與標(biāo)準(zhǔn)的數(shù)據(jù)流相結(jié)合,語(yǔ)法格式如下:InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);11.3.3字節(jié)緩沖流BufferedInputStream和BufferedOutputStream11.3字節(jié)流1.數(shù)據(jù)輸入流DataInputStream數(shù)據(jù)輸入流DataInputStream允許應(yīng)用程序以與機(jī)器無(wú)關(guān)方式從底層輸入流中讀取基本Java數(shù)據(jù)類型。應(yīng)用程序可以使用數(shù)據(jù)輸出流寫(xiě)入稍后由數(shù)據(jù)輸入流讀取的數(shù)據(jù)。2.數(shù)據(jù)輸出流DataOutputStreamDataOutputStream數(shù)據(jù)輸出流允許應(yīng)用程序?qū)⒒綣ava數(shù)據(jù)類型寫(xiě)到基礎(chǔ)輸出流中。11.3.4字節(jié)數(shù)據(jù)流DataInputStream和DataOutputStream11.4字符流1.Reader抽象類Reader是用于讀取字符流的抽象類,它能夠?qū)⑤斎肓髦胁捎闷渌幋a類型的字符轉(zhuǎn)換為Unicode字符,然后在內(nèi)存中為其分配內(nèi)存。其子類必須實(shí)現(xiàn)的方法只有read(char[],int,int)和close()。11.4.1抽象字符流Reader和Writer11.4字符流2.Writer抽象類Writer是寫(xiě)入字符流的抽象類,它能夠?qū)?nèi)存中的Unicode字符轉(zhuǎn)換為其它編碼類型的字符,再寫(xiě)到輸出流中。其子類必須實(shí)現(xiàn)的方法僅有write(char[],int,int)、flush()和close()。11.4.1抽象字符流Reader和Writer11.4字符流FileReader與FileInputStream都是讀取文件的輸入流,F(xiàn)ileReader主要用來(lái)讀取字符文件,使用缺省的字符編碼。11.4.2字符文件流FileReader和FileWriter11.4字符流為了提高字符流讀寫(xiě)的效率,引入了緩沖機(jī)制,進(jìn)行字符批量的讀寫(xiě),提高了單個(gè)字符讀寫(xiě)的效率。BufferedReader用于加快讀取字符的速度,BufferedWriter用于加快寫(xiě)入的速度。BufferedReader是為了提供讀的效率而設(shè)計(jì)的一個(gè)包裝類,它可以包裝字符流??梢詮淖址斎肓髦凶x取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。BufferedReader的StringreadLine()這個(gè)方法一次可以讀取一個(gè)文本行,返回的直接就是這一行的字符串,如果讀到行尾了就返回null。11.4.3字符緩沖流BufferedReader和BufferedWriter11.4字符流InputStreamReader是字節(jié)流通向字符流的橋梁,它使用指定的charset讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺(tái)默認(rèn)的字符集。每次調(diào)用InputStreamReader中的一個(gè)read()方法都會(huì)導(dǎo)致從底層輸入流讀取一個(gè)或多個(gè)字節(jié)。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,可以提前從底層流讀取更多的字節(jié),使其超過(guò)滿足當(dāng)前讀取操作所需的字節(jié)。在BufferedReader類里包裝InputStreamReader對(duì)象是一種從鍵盤(pán)輸入字符或字符串的常用方法。11.4.4轉(zhuǎn)換流InputStreamReader和OutputStreamWriter11.5ZIP壓縮輸入/輸出流ZIP是一種較為常見(jiàn)的文件壓縮形式,在Java中要想實(shí)現(xiàn)ZIP的壓縮需要導(dǎo)入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry幾個(gè)類完成文件的壓縮。11.5.1壓縮文件11

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論