




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 輸入輸入/ /輸出處理是程序設(shè)計中重要的一個部分,比如從鍵盤讀取數(shù)據(jù)、從輸出處理是程序設(shè)計中重要的一個部分,比如從鍵盤讀取數(shù)據(jù)、從文件中讀取數(shù)據(jù)或向文件中寫數(shù)據(jù)等等。文件中讀取數(shù)據(jù)或向文件中寫數(shù)據(jù)等等。javajava把這些不同類型的輸入、把這些不同類型的輸入、輸出源抽象為流(輸出源抽象為流(streamstream),用統(tǒng)一接口來表示,從而使程序簡單明了。),用統(tǒng)一接口來表示,從而使程序簡單明了。本章主要介紹本章主要介紹javajava程序輸入輸出的實現(xiàn)和文件與目錄的管理。程序輸入輸出的實現(xiàn)和文件與目錄的管理。 本章要點本章要點l10.1 輸入與輸出基礎(chǔ)輸入與輸出基礎(chǔ)l10.2 文件輸入文
2、件輸入/輸出輸出l思考與練習(xí)思考與練習(xí)10java的輸入輸出功能必須使用類庫java.io來實現(xiàn),這個類庫中的類大部分是用來完成流式輸入輸出的類。java applet程序的特點如下。10.1.1 流的概念流的概念流式輸入輸出是一種很常見的輸入輸出方式。流是指在計算機的輸入與輸出之間運動的數(shù)據(jù)序列。流序列中的數(shù)據(jù)既可以是未經(jīng)加工的原始的二進制數(shù)據(jù),也可以是經(jīng)一定編碼處理后符合某種格式規(guī)定的特定數(shù)據(jù)。java程序通過流來完成輸入/輸出。流通過java的輸入/輸出系統(tǒng)與物理設(shè)備鏈接。盡管與它們鏈接的物理設(shè)備不盡相同,所有流的行為具有同樣的方式。這樣,相同的輸入/輸出類和方法適用于所有類型的外部設(shè)備
3、。這意味著一個輸入流能夠抽象多種不同類型的輸入:磁盤文件,鍵盤或網(wǎng)絡(luò)套接字。同樣,一個輸出流可以輸出到控制臺,磁盤文件或相連的網(wǎng)絡(luò)。java中流的實現(xiàn)是在java.io包定義的類層次結(jié)構(gòu)內(nèi)部的。在java中,把不同類型的輸入、輸出源(鍵盤、文件、網(wǎng)絡(luò)等)抽象為流(stream),而其中輸入或輸出的數(shù)據(jù)則稱為數(shù)據(jù)流(data stream),用統(tǒng)一的方式來表示,從而使程序設(shè)計簡單明了。輸入流只能從中讀取數(shù)據(jù),而不能向其寫出數(shù)據(jù);輸出流只能向其寫出數(shù)據(jù),而不能從中讀取數(shù)據(jù)。10.1.2 字節(jié)流與字符流字節(jié)流與字符流java定義了兩種類型的流:字節(jié)類和字符類。它們屬于基本輸入/輸出流類,是其他輸入/
4、輸出流類的父類。字節(jié)流(byte stream)為處理字節(jié)的輸入和輸出提供了方便的方法,例如,使用字節(jié)流讀取或書寫二進制數(shù)據(jù)。字符流(character stream)為字符的輸入和輸出處理提供了方便。它們采用了統(tǒng)一的編碼標準,因而可以國際化。當然,在某些場合,字符流比字節(jié)流更有效。需要聲明:在最底層,所有的輸入/輸出都是字節(jié)形式的?;谧址牧髦粸樘幚碜址峁┓奖阌行У姆椒?。下面是對字節(jié)流和字符流的介紹。字節(jié)流類字節(jié)流由兩個類層次結(jié)構(gòu)定義。在頂層有兩個抽象類:inputstream 和 outputstream。每個抽象類都有多個具體的子類,這些子類對不同的外設(shè)進行處理,例如磁盤文件,網(wǎng)絡(luò)連
5、接,甚至是內(nèi)存緩沖區(qū)。需要說明的是,要使用流類,必須導(dǎo)入java.io包。書中表10-1顯示了字節(jié)流類。 10.1.2 字節(jié)流與字符流字節(jié)流與字符流抽象類inputstream 和 outputstream定義了實現(xiàn)其他流類的關(guān)鍵方法。最重要的兩種方法是read()和write(),它們分別對數(shù)據(jù)的字節(jié)進行讀寫。兩種方法都在inputstream 和outputstream中被定義為抽象方法,它們被派生的流類重載。inputstream類中的常用方法有:int read():從輸入流中讀一個字節(jié),形成一個0255之間的整數(shù)返回(是一個抽象方法)。int read(byte b):讀多個字節(jié)到數(shù)
6、組中。int read(byte b, int off, int len):從輸入流中讀取長度為len的數(shù)據(jù),寫入數(shù)組b中從索引off開始的位置,并返回讀取的字節(jié)數(shù)。對于這三個方法,若返回1,表明流結(jié)束。10.1.2 字節(jié)流與字符流字節(jié)流與字符流skip():跳過流中若干字節(jié)數(shù)available():返回流中可用字節(jié)數(shù)mark():在流中標記一個位置reset():返回標記過得位置marksupport():是否支持標記和復(fù)位操作close():關(guān)閉流outputstream類的常用方法有:write(int b):將一個整數(shù)輸出到流中(只輸出低位字節(jié),抽象方法)nwrite(byte b):
7、將字節(jié)數(shù)組中的數(shù)據(jù)輸出到流中nwrite(byte b, int off, int len):將數(shù)組b中從off指定的位置開始,長度為len的數(shù)據(jù)輸出到流中flush():刷空輸出流,并將緩沖區(qū)中的數(shù)據(jù)強制送出close():關(guān)閉流10.1.2 字節(jié)流與字符流字節(jié)流與字符流字符流類字符流類由兩個類層次結(jié)構(gòu)定義。頂層有兩個抽象類:reader和writer。這些抽象類處理統(tǒng)一編碼的字符流。java中這些類含有多個具體的子類。字符流類如書中表10-2所示。 抽象類reader和writer定義了幾個實現(xiàn)其他流類的關(guān)鍵方法。其中兩個最重要的是read()和write(),它們分別進行字符數(shù)據(jù)的讀和寫
8、。這些方法被派生流類重載。java的輸入/輸出類庫中包含的流類很多,這里只作了一個簡要的介紹。更詳細的內(nèi)容可以參看類庫手冊。 10.1.3 標準輸入標準輸入/輸出輸出java程序使用字符界面與系統(tǒng)標準輸入輸出間進行數(shù)據(jù)通信,即從鍵盤讀入數(shù)據(jù),或向屏幕輸出數(shù)據(jù),是十分常見的操作。為此而頻頻創(chuàng)建輸入輸出流類對象將很不方便。因此,java系統(tǒng)事先定義好三個流對象,分別與系統(tǒng)的標準輸入、標準輸出和標準錯誤輸出相聯(lián)系。所有的java程序自動導(dǎo)入java.lang包。該包定義了一個名為system的類,該類封裝了運行時環(huán)境的多個方面。例如,使用它的某些方法,你能獲得當前時間和與系統(tǒng)有關(guān)的不同屬性。syst
9、em 同時包含三個預(yù)定義的流變量:in,out和err。這些成員在system中是被定義成public和static型的,這意味著它們可以不引用特定的system對象而被用于程序的其他部分。10.1.3 標準輸入標準輸入/輸出輸出system.out是標準的輸出流,默認情況下,它指的是顯示設(shè)備。system.in是標準輸入,默認情況下,它指的是鍵盤。system.err指的是標準錯誤流,它默認是顯示設(shè)備。這些流也可以重定向到任何兼容的輸入/輸出設(shè)備。system.in 是inputstream的對象;system.out和system.err是printstream的對象。盡管它們用來讀寫外設(shè)
10、的字符,但它們都是字節(jié)流。(1)標準輸入java的標準輸入system.in是inputstream類的對象,當程序中需要從鍵盤讀入數(shù)據(jù)的時候,只需調(diào)用system.in的read()方法即可。如下面的語句將從鍵盤讀入一個字節(jié)的數(shù)據(jù):char ch = system.in.read();10.1.3 標準輸入標準輸入/輸出輸出在使用system.in.read()方法讀入數(shù)據(jù)時,需要注意如下幾點:system.in.read()語句必須包含在try塊中,且try塊后面應(yīng)該有一個可接收ioexception異常的catch塊。如下例所示:try ch = system.in.read(); ca
11、tch(ioexception e) 執(zhí)行system.in.read()方法將從鍵盤緩沖區(qū)讀入一個字節(jié)的數(shù)據(jù),然而返回的卻是16比特的整型量的低位字節(jié)是真正輸入的數(shù)據(jù),其高位字節(jié)是全零。10.1.3 標準輸入標準輸入/輸出輸出另外,作為inputstream類的對象,system.in只能從鍵盤讀取二進制的數(shù)據(jù),而不能把這些比特信息轉(zhuǎn)換為整數(shù)、字符、浮點數(shù)或字符串等復(fù)雜數(shù)據(jù)類型的量。當鍵盤緩沖區(qū)中沒有未被讀取的數(shù)據(jù)時,執(zhí)行system.in.read()將導(dǎo)致系統(tǒng)轉(zhuǎn)入阻塞(block)狀態(tài)。在阻塞狀態(tài)下,當前流程將停留在上述語句位置且整個程序被掛起,等待用戶輸入一個鍵盤數(shù)據(jù)后,才能繼續(xù)運行下
12、去;所以程序中有時利用system.in.read()語句來達到暫時保留屏幕的目的。例如,下面的語句段:system.out.println(press any key to finish the program);try char test=(char)system.in.read( );catch(ioexception e) 10.1.3 標準輸入標準輸入/輸出輸出(2) 標準輸出java的標準輸出system.out是打印輸出流printstream類的對象。printstream是過濾輸出類流filteroutputstream的一個子類,其中定義了向屏幕輸送不同類型數(shù)據(jù)的方法pri
13、nt()和println()。println()方法有多種形式,概括起來可表述為:public void println ( 類型 變量或?qū)ο?);println()的作用是向屏幕輸出其參數(shù)指定的變量或?qū)ο?,然后再換行,使光標停留在屏幕下一行第一個字符的位置。如果println()方法的參數(shù)為空,則將輸出一個空行。println()方法可輸出多種不同類型的變量或?qū)ο螅╞oolean,double,float,int,long類型的變量以及object類的對象。print()方法的使用情況與println()方法完全相同,也可以實現(xiàn)在屏幕上輸出不同類型的變量和對象的操作。不同的是,print
14、()方法輸出對象后并不附帶一個回車,下一次輸出時,將輸出在同一行中。java提供了一系列的讀寫文件的類和方法。在java中,所有文件都是字節(jié)形式的。java提供從文件讀寫字節(jié)的方法,而且允許在字符形式的對象中使用字節(jié)文件流。10.2.1 java文件和目錄管理文件和目錄管理文件是用來保存數(shù)據(jù)的,目錄是管理文件的特殊機制,同類文件保存在同一個目錄下可以簡化文件管理。因此,掌握文件和目錄的操作對于編程人員是十分必須的。java支持文件管理和目錄管理,它們都是由專門的java.io.file類來實現(xiàn)。file類也屬于javaio包中,但它不是inputstream或者outputstream的子類。
15、每個file類的對象表示一個磁盤文件或目錄,其對象屬性中包含了文件或目錄的相關(guān)信息,如名稱、長度、所含文件個數(shù)等,調(diào)用它的方法則可以完成對文件或目錄的常用管理操作,如創(chuàng)建、刪除等。10.2.1 java文件和目錄管理文件和目錄管理1創(chuàng)建創(chuàng)建file類的對象類的對象每個file類的對象都對應(yīng)了系統(tǒng)的一個磁盤文件或目錄,所以創(chuàng)建file類對象時需指明它所對應(yīng)的文件或目錄名。file類共提供了三個不同的構(gòu)造方法,以不同的參數(shù)形式靈活地接收文件和目錄名信息。(1)file(string path):字符串參數(shù)path指明了新創(chuàng)建的file對象對應(yīng)的磁盤文件或目錄名及其路徑名。path參數(shù)也可以對應(yīng)磁盤
16、上的某個目錄,如“c:javatemp”或“javatemp”。(2)file(string path,string name):第一個參數(shù)path表示所對應(yīng)的文件或目錄的絕對或相對路徑,第二個參數(shù)name表示文件或目錄名。這里將路徑與名稱分開的好處是相同路徑的文件或目錄可共享同一個路徑字符串,管理、修改都較方便。(3)file(file dir,string name):這個構(gòu)造方法使用另一個已經(jīng)存在的代表某磁盤目錄的file對象作為第一個參數(shù),表示文件或目錄的路徑,第二個字符串參數(shù)表述文件或目錄名。10.2.1 java文件和目錄管理文件和目錄管理2獲取文件或目錄屬性獲取文件或目錄屬性一個
17、對應(yīng)于某磁盤文件或目錄的file對象一經(jīng)創(chuàng)建,就可以通過調(diào)用它的方法來獲得該文件或目錄的屬性。其中,較常用的方法如下:(1)判斷文件或目錄是否存在:pub1ic boo1ean exists();若文件或目錄存在,則返回true;否則返回false(2)判斷是文件還是目錄:public boolean isfile();若對象代表有效文件,則返回truepub1ic boolean isdirectory();若對象代表有效目錄,則返回true10.2.1 java文件和目錄管理文件和目錄管理2獲取文件或目錄屬性獲取文件或目錄屬性(3)獲取文件或目錄名稱與路徑:public string ge
18、tname();返回文件名或目錄名public string getpath();返回文件或目錄的路徑(4)獲取文件的長度:public long length();返回文件的字節(jié)數(shù)(5)獲取文件讀寫屬性public boolean canread();若文件為可讀文件,則返回true,否則返回falsepublic boolean canwrite();若文件為可寫文件,返回true,否則返回false 10.2.1 java文件和目錄管理文件和目錄管理2獲取文件或目錄屬性獲取文件或目錄屬性(6)列出目錄中的文件:public strins list();將目錄中所有文件名保存在字符串數(shù)組中
19、返回(7)比較兩個文件或目錄public boolean equals(file f);若兩個file對象相同,則返回true10.2.1 java文件和目錄管理文件和目錄管理3文件或目錄操作文件或目錄操作file類中還定義了一些對文件或目錄進行管理、操作的方法,常用的有如下幾種:(1)重命名文件:pub1ic boolean renameto(filenewfile);將文件重命名成newfile對應(yīng)的文件名(2)刪除文件:public void delete();將當前文件刪除(3)創(chuàng)建目錄:public boolean mkdir();創(chuàng)建當前目錄的子目錄 10.2.2 文件輸入文件輸入
20、/輸出流輸出流使用file類,可以方便地建立與某磁盤文件的連接,但是,如果希望從磁盤文件讀取數(shù)據(jù),或者將數(shù)據(jù)寫入文件,還需要使用文件輸入/輸出流類fileinputstream和fileoutputstream。下面是它們的形式:fileinputstream(string filename) throws filenotfoundexceptionfileoutputstream(string filename) throws filenotfoundexception這里,filename指定需要打開的文件名。當你創(chuàng)建了一個輸入流而文件不存在時,引發(fā)filenotfoundexceptio
21、n異常。對于輸出流,如果文件不能生成,則引發(fā)filenotfound exception異常。如果一個輸出文件被打開,所有原先存在的同名的文件被破壞。10.2.2 文件輸入文件輸入/輸出流輸出流當你對文件的操作結(jié)束后,需要調(diào)用close( )來關(guān)閉文件。該方法在fileinputstream和fileoutputstream中都有定義。例如:void close( ) throws ioexception為讀文件,可以使用在fileinputstream中定義的read( )方法。例如:int read( ) throws ioexception該方法每次被調(diào)用,它僅從文件中讀取一個字節(jié)并將該
22、字節(jié)以整數(shù)形式返回。當讀到文件尾時,read( )返回-1。該方法可以引發(fā)ioexception異常。向文件中寫數(shù)據(jù),需用fileoutputstream定義的write()方法。它的最簡單形式如下:void write(int byteval) throws ioexception該方法按照byteval指定的數(shù)向文件寫入字節(jié)。盡管byteval作為整數(shù)聲明,但僅低8位字節(jié)可以寫入文件。如果在寫的過程中出現(xiàn)問題,一個ioexception異常被引發(fā)。10.2.2 文件輸入文件輸入/輸出流輸出流利用文件輸入、輸出流完成磁盤文件的讀寫一般應(yīng)遵循如下的步驟:1 1利用文件名字符串或利用文件名字符串
23、或filefile對象創(chuàng)建輸入輸出流對象對象創(chuàng)建輸入輸出流對象fileinputstream有兩個常用的構(gòu)造方法:(1)fileinputstream(string filename);利用文件名(包括路徑名)字符串創(chuàng)建從該文件讀入數(shù)據(jù)的輸入流。(2)fileinputstream(file f);利用已存在的file對象創(chuàng)建從該對象對應(yīng)的磁盤文件中讀入數(shù)據(jù)的文件輸入流。需要注意的是:無論哪個構(gòu)造方法,在創(chuàng)建文件輸入或輸出流時都可能因給出的文件名不對或路徑不對,或文件的屬性不對等,不能讀出文件而造成錯誤,此時系統(tǒng)會拋出異常filenotfoundexception。所以創(chuàng)建文件輸入、輸出流并調(diào)
24、用構(gòu)造方法的語句應(yīng)該被包括在try塊中,并有相應(yīng)的catch塊來處理它們可能產(chǎn)生的異常。10.2.2 文件輸入文件輸入/輸出流輸出流2 2從文件輸入從文件輸入/ /輸出流中讀寫數(shù)據(jù)輸出流中讀寫數(shù)據(jù)從文件輸入、輸出流中讀寫數(shù)據(jù)有兩種方式,一是直接利用fileinputstream和fileoutputstream自身的讀寫功能;一是以fileinputstream和fileoutputstream為原始數(shù)據(jù)源,再套接上其他功能較強大的輸入、輸出流完成文件的讀寫操作。為了能更方便地從文件中讀寫不同類型的數(shù)據(jù),一般都采用第二種方式,即以fileinputstream和fileoutputstream
25、為數(shù)據(jù)源完成與磁盤文件的映射連接后,再創(chuàng)建其他流類的對象從fileinputstream和fileoutputstream對象中讀寫數(shù)據(jù)。一般較常用的是過濾流的兩個子類datainputstream和dataoutputstream,甚至還可以進一步簡化為如下寫法:fi1e myfi1e= new file (mytextfile );datainputstream din =new datainputstream(new fileinputstream (myeile);dataoutputstream dour=new dataoutputstream(new fileoutputstre
26、am(myfi1e);10.2.3 隨機存取文件隨機存取文件fileinputstream和fileoutputstream實現(xiàn)的是對磁盤文件的順序讀寫,而且讀和寫要分別創(chuàng)建不同的對象。相比之下,java中還定義了另一個功能更強大,使用更方便的類randomaccessfile,它可以實現(xiàn)對文件的隨機讀寫操作。1 1創(chuàng)建創(chuàng)建randomaccessfilerandomaccessfile對象對象randomaccessfile類有兩個構(gòu)造方法:randomaccessfile(string name, string mode);randomaccessfile(file f, string m
27、ode);無論使用哪個創(chuàng)建randomaccessfile對象,都要求提供兩種信息:一個作為數(shù)據(jù)源的文件,以文件名字符串或文件對象的方式表述;另一個是訪問模式字符串,它規(guī)定了randomaccessfile對象可以用何種方式打開和訪問指定的文件。10.2.3 隨機存取文件隨機存取文件訪問模式字符串mode有兩種取值:“r”代表了以只讀方式打開文件;“rw”代表以讀寫方式打開文件,這時用一個對象就可以同時實現(xiàn)讀寫兩種操作。創(chuàng)建randomaccessfile對象時,可能產(chǎn)生兩種異常:當指定的文件不存在時,系統(tǒng)將拋出filenotfoundexception;若試圖用讀寫方式打開只讀屬性的文件或出現(xiàn)了其他輸入、輸出錯誤,則會拋出ioexception異常。下面是創(chuàng)建randomaccessfile對象例子:file file1=new file (file1.txt );randomaccessfile myra=new randomaccessfile (file1, rw );10.2.3 隨機存取文件隨機存取文件2 2對文件位置指針的操作對文件位置指針的操作randomaccessfile實現(xiàn)的是隨機讀寫,即可以在文件的任意位置執(zhí)行數(shù)據(jù)讀寫,而不一定要從前向后操作。要實現(xiàn)這樣的功能,必須定義文件位置指針和移動這個指針的方法。randomaccessfile對象的文件位置指針遵
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修理廠和供貨商合同范本
- 公寓開荒保潔合同范本
- 加裝電梯加盟合同范本
- canying勞動合同范本
- 剝離工程合同范本
- 保理 保證合同范本
- 養(yǎng)鵝訂單合同范本
- 中介居間服務(wù)合同范本
- 催收咨詢服務(wù)合同范例
- 加工制作維修合同范例
- 壘球教案完整版本
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案
- 2024年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 2024年大理農(nóng)林職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- C語言課程思政案例
- 發(fā)展?jié)h語初級口語I-第11課課件
- 《柔性棚洞防護結(jié)構(gòu)技術(shù)規(guī)程》
- 現(xiàn)場施工環(huán)境保護應(yīng)急預(yù)案
- 危險廢物綜合利用與處置技術(shù)規(guī)范 通則
- 社區(qū)舞蹈隊章程
評論
0/150
提交評論