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

下載本文檔

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

文檔簡介

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論