版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第10章 文件和流,學(xué)習(xí)導(dǎo)讀,輸入和輸出是一個程序重要的功能,Java的應(yīng)用程序和Java Applet往往經(jīng)常要通過輸入和輸出來讀寫數(shù)據(jù)。 本章將介紹如何從一個能發(fā)送字節(jié)序列的“數(shù)據(jù)源”獲得輸入,以及如何將輸出發(fā)送給能夠接收字節(jié)序列的一個“目標(biāo)”。,課程結(jié)構(gòu),Java流類庫簡介 基本流 數(shù)據(jù)流 過濾流 文件流 對象流,10.1 Java流類庫簡介,1 流的概念 Java所有的I/O機制都是基于數(shù)據(jù)流的,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動序列。 流是一個很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)時,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接,則這就是“輸入流”,如圖所示。類
2、似的,當(dāng)程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流,這就是“輸出流”,這時你就可以想像數(shù)據(jù)好像在這其中“流”動一樣,如圖所示。,10.1 Java流類庫簡介,輸入流,輸出流,10.1 Java流類庫簡介,Java中的流分為兩種: 一種是字節(jié)流,另一種是字符流 分別由四個抽象類來表示(每種流包括輸入和輸出各兩種,所以一共四個): InputStream OutputStream Reader Writer,10.1 Java流類庫簡介,2 Java的I/O庫 Java中的字節(jié)流是用于處理字節(jié)的輸入和輸出的,包括讀寫二進制數(shù)據(jù)等方面的內(nèi)容。 InputStream OutputStream
3、 而Java中的字符流則用于處理字符的輸入和輸出,采用的是Unicode編碼,可以實現(xiàn)國際化。 Reader Writer,10.1 Java流類庫簡介,(1)InputStream 1)abstract int read() 2)int read(byte b) 3)int read(byte b,int off,int len) 4)long skip(long n) 5)int available() 6)void close() 7)void mark(int readlimit) 8)void reset() 9)boolean markSupported(),10.1 Java流類
4、庫簡介,(2)OutputStream 1)abstract void write(int b) 2)void write(byte b) 3)void write(byte b,int off,int len) 4)void close() 5)void flush(),10.1 Java流類庫簡介,(3)Reader Writer public abstract int read() throws IOException public abstract void write() throws IOException,10.2 基本流,1. 鍵盤輸入和格式化輸出 它有3個內(nèi)置的標(biāo)準流對象,它
5、們是: 1)標(biāo)準輸入流System.io:用于程序的輸入,通常用來讀取用戶從鍵盤的輸入。 2)標(biāo)準輸出流System.out:用于程序的輸出,通常用來在屏幕上顯示信息。 3)標(biāo)準出錯流System.err:用于顯示出錯信息。,10.2 基本流,基本的鍵盤輸入 (1)方法一:使用System.in對象的方法read()來讀取鍵盤的輸入 見例10。1 (2)方法二:可以通過java.io包中提供的流類接收鍵盤的輸入 見例10。2 (3)可以通過控制臺類Console類來實現(xiàn)從鍵盤輸入;控制臺類Console不屬于Java的標(biāo)準類庫,它屬于corejava包 見例10。3,10.2 基本流,格式化輸
6、出 1)輸出方法:用System.out內(nèi)置的標(biāo)準輸出對象來輸出到標(biāo)準設(shè)備(一般是顯示器) 見例10。3 2)可以控制顯示格式,在java.text包中的NumberFromat類就可以控制輸出的格式 見例10。5 3)用戶還可以創(chuàng)建自己的格式 4)用Console類格式化輸出,10.2 基本流,2.讀和寫字節(jié) (1)InputStream類的抽象方法 (2)OutputStream類的抽象方法 (3)available方法,10.3 數(shù)據(jù)流,數(shù)據(jù)流支持所有Java中的基本類型。 可以通過分別實現(xiàn)了DataOutput和DataInput兩個接口的DataOutputStream和DataIn
7、putStream類中的方法對基本數(shù)據(jù)進行讀寫,10.3 數(shù)據(jù)流,DataInput接口 1)boolean readBoolean():讀入一個布爾值。 2)byte readByte():讀入一個8位字節(jié)。 3)char readChar():讀入一個16位的字符。 4)double readDouble():讀入一個64位double字符。 5)float readFloat():讀入一個32位float字符。 6)void readFully(byte b):讀字節(jié),直到讀所有字節(jié)才封鎖,參數(shù)b為讀入數(shù)據(jù)的緩沖區(qū)。,10.3 數(shù)據(jù)流,7)void readFully(byte b,in
8、t off,int len):讀字節(jié),直到讀所有字節(jié)才封鎖,參數(shù)b為讀入數(shù)據(jù)的緩沖區(qū),off為數(shù)據(jù)的起始偏移量,len為寫的字節(jié)數(shù)。 8)int readInt():讀一個32位整數(shù)。 9)String readLine():讀入一行以一個n,r,rn或EOF結(jié)束的字符串,返回一個字符串,該字符串包含轉(zhuǎn)換為單位碼字符的行中的所有字節(jié)。 10)long readLong():讀入一個64位的長整數(shù)。 11)short readShort():讀入一個16位的短整數(shù)。 12)String readUTF():讀入一個UTF格式的字符串。 13)int skipByte(int n):跳過若干個字節(jié)
9、,直到跳過所有的字節(jié)才封鎖,n為跳過的字節(jié)。,10.3 數(shù)據(jù)流,2 Java.DataOutput接口 1)void writeBoolean(boolean b):寫一個布爾值。 2)void writeByte(byte b):寫一個8位字節(jié)。 3)void writeChar(char c):寫一個16位字符。 4)void writeChars(String s):寫入字符串的所有字符。 5)void writeFloat(float f):寫32位float數(shù)。 6)void writeDouble(double d):寫64位double數(shù)。 7)void writeInt(int
10、 I):寫32位整數(shù)。 8)void writeLong(long l):寫64位長整數(shù)。 9)void writeShort(short s):寫16位短整數(shù)。 10)void writeUTF(String s):寫一個UTF格式的字符串,10.4 java的輸入輸出流簡介,一、字節(jié)流:( InputStream,OutStream) 1、FileInputStream(文件輸入流):源自日常文件的數(shù)據(jù)輸入流,它可以創(chuàng)建一個能從文件中讀取字節(jié)的InputStream類。它的構(gòu)造函數(shù)為: FileInputStream(String filepath) throws FileNotFound
11、Exception; FileInputStream(File fileObj) throws FileNotFoundException; 其中:filepath是文件的全稱路徑,fileObj是描述該文件的File對象。,2、ByteArrayInputStream(字節(jié)數(shù)組輸入流) 把字節(jié)數(shù)組當(dāng)成源的輸入流。 ByteArrayInputStream 包含一個內(nèi)部緩沖區(qū),該緩沖區(qū)存儲從流中讀取的字節(jié)。內(nèi)部計數(shù)器跟蹤 read 方法要提供的下一個字節(jié)。構(gòu)造函數(shù): ByteArrayInputStream(byte array) ByteArrayInputStream(byte array
12、,int start,int numBytes) 例:ByteArrayInputStreamReset.java,10.4 java的輸入輸出流簡介,3、FileOutputStream(文件輸出流) 創(chuàng)建一個可以向文件寫入字節(jié)的類OutputStream,可以引發(fā)IOException或SecurityException異常。FileOutputStrem的創(chuàng)建不依賴于文件是否存在。在創(chuàng)建對象時FileOutputStream在打開輸出文件之前創(chuàng)建它。此時如果打開一個只讀文件,將會引發(fā)一個IOException異常。常用構(gòu)造函數(shù): FileOutputStream(String fileP
13、ath) FileOutputStream(String filePath,boolean append) FileOutputStream(File fileObj) 例:FileOutputStreamDemo.java,10.4 java的輸入輸出流簡介,4、ByteArrayOutputStream(字節(jié)數(shù)組輸出流) 是一個把字節(jié)數(shù)組當(dāng)作輸出流的實現(xiàn),構(gòu)造函數(shù)為: ByteArrayOutputStream():生成一個32位字節(jié)的緩沖器。 ByteArrayOutputStream(int numBytes):生成一個跟指定numBytes相同位數(shù)的緩沖器。 5、BufferedIn
14、putStream(緩沖輸入流)和BufferedOutputStream(緩沖輸出流) BufferedInputStream在InputStream中加一個讀取緩沖,能顯著提高讀取性能。,10.4 java的輸入輸出流簡介,構(gòu)造函數(shù): BufferedInputStream(InputStream inputStream):生成一個默認長度的緩沖流。 BufferedInputStream(InputStream inputStream,int bufSize):緩沖器的大小是由bufSize傳入的。 BufferedOutputStream:把write()等方法寫入的數(shù)據(jù)暫時存放在緩沖
15、區(qū)中,當(dāng)緩沖區(qū)滿或者用戶調(diào)用flush()強制寫入數(shù)據(jù)時才把數(shù)據(jù)寫入輸入輸出設(shè)備。這樣有效地減少讀寫設(shè)備的次數(shù),提高系統(tǒng)的性能。 構(gòu)造函數(shù): BufferedOutputStream(OutputStream outputStream) BufferedOutputStream(OutputStream outputStream,int bufSize) 例:DownLoad.java,10.4 java的輸入輸出流簡介,6、SequenceInputStream(順序輸入流) 可以連接多個InputStream流。 7、PushbackInputStream(返回輸入流) 用于輸入流允許字節(jié)
16、被讀取然后返回到流。,10.4 java的輸入輸出流簡介,二、字符流: 字節(jié)流提供了處理任何類型輸入/輸出操作的足夠的功能,但它們不能直接操作Unicode字符,字符流面向字符,讀寫的單位是兩個字節(jié)。字符流以Reader和Writer為頂層。 常見的字符流: 1、FileReader和FileWriter: FileReader創(chuàng)建一個可以讀取文件內(nèi)容的Reader類: 構(gòu)造函數(shù): FileReader(String filePath) FileReader(FilefileObj),10.4 java的輸入輸出流簡介,FileWriter創(chuàng)建一個可以寫文件的Writer類: FileWrit
17、er(String filePath) FileWriter(String filePath,boolean append) FileWriter(File fileObj) 例:txtCopy.java,10.4 java的輸入輸出流簡介,2、CharArrayReader和CharArrayWriter (1)CharArrayReader是一個把字符數(shù)組作為源的輸入流的實現(xiàn),構(gòu)造函數(shù): CharArrayReader(char array); CharArrayReader(char array,int start,int numChars); (2) CharArrayWriter是一
18、個把字符數(shù)組作為目標(biāo)的輸出流的實現(xiàn),構(gòu)造函數(shù): CharArrayWriter():創(chuàng)建一個默認長度的緩沖器。 CharArrayWriter(int numChars):緩沖器長度由numChars指定。 例:CharArrayReaderDemo.java,10.4 java的輸入輸出流簡介,3、BufferedReader和BufferedWriter 4、PushbackReader:允許一個字符或多個字符被送回輸入流。,10.4 java的輸入輸出流簡介,10.5過濾流,對于某些流來說(比如FileInputStream),它可從文件或一些更特殊的地方讀入字節(jié)數(shù)據(jù)。 對另一些流來說(
19、比如DataInputStream以及PrintWriter),它們則可將字節(jié)“組裝”成更有用的數(shù)據(jù)類型。 Java程序源必須綜合運用這兩種流,將其合并成所謂的“過濾流”, 方法是將一個現(xiàn)成的流傳遞給另一個流的構(gòu)造函數(shù)。,10.6文件流,在Java中,文件流是用得比較廣泛的一種流形式,它以磁盤文件為輸入或輸出的原始數(shù)據(jù)和目的。 在Java中,把文件看成是一個字符(字節(jié))的序列。根據(jù)數(shù)據(jù)的組織形式,可將文件分為文本文件和二進制文件。 在文本文件中,每一個字節(jié)存放一個ASCII碼,代表一個字符。 二進制文件是把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣輸出到磁盤文件上存放。 文件流也就根據(jù)所針對的文件
20、類型的不同而分為文本流和二進制流。 在Java的I/O庫中,抽象類Reader和Writer只能用來對文本文件進行操作,而 抽象類InputStream和OutputStream 可以對文本文件或二進制文件進行操作。,10.5 文件流,1 二進制文件的讀寫 (1)二進制文件的寫 二進制文件的寫通常要用到DataOutputStream類 格式如下: FileOutputStream out=new FileOutputStream(“路徑和文件名”); DataOutputStream dos=new DataOutputStream(“out”); 或 DataOutputStream do
21、s=new DataOutputStream( new FielOutputStream(“路徑和文件名”)); 然后可以用DataOutputStream實現(xiàn)的方法向文件寫入數(shù)據(jù) dos.writeDouble(); dos.writeInt() 見例10.6,10.5 文件流,(2)二進制文件的讀 二進制形式文件的讀,通常要用到DataInputStream類 格式如下: FileInputStream in=new FileInputStream(“路徑和文件名“); DataInputStream dis=new DataInputStream(“in”); 當(dāng)然也可以寫成: Data
22、InputStream dis=new DataInputStream( new FileInputStream(“路徑和文件名“)); 然后用數(shù)據(jù)流的方法讀入文件中的數(shù)據(jù),如: double d=dis.readDouble(); int i=dis.readInt(); 見例10。7,10.5 文件流,2 文本文件的讀寫 在Java中,采用的是Unicode字符。也就是說“1234”這個字符串的字符編碼是00 31 00 32 00 33 00 34 Java提供了一個過濾流,可以用來彌補Unicode編碼和本機操作系統(tǒng)采用的字符編碼間不同造成的問題 如 FileInputStream f
23、is=new FileInputStream(“myfile.txt”); InputStreamReader isr=new InputStreamReader(fis); 或 nputStreamReader isr=new InputStreamReader( new FileInputStream(“myfile.txt”); 或 FileReader fr=new FileReader(“myfile.txt”),10.5 文件流,(1)寫文本文件 1)FileOutputStream 方法是: FileOutputStream out out = new FileOutputStr
24、eam(myfile.txt); PrintStream p = new PrintStream( out ); 用 p.println() 來寫入數(shù)據(jù),然后用 p.close() 關(guān)閉輸入 見例10。9 2)用 FileWriter 方法是:FileWriter fw = new FileWriter(mydata.txt);PrintWriter out = new PrintWriter(fw); 用out.print 或 out.println往文件中寫入數(shù)據(jù),寫完后要用out.close() 關(guān)閉輸出,用fw.close() 關(guān)閉文件 見例10。10,10.5 文件流,2讀文本文件 1) 用FileInputStream 方法是: FileInputStream fstream = new FileInputStream(args0); DataInputStream in = new DataInput
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療衛(wèi)生小知識
- 基于Landsat-8影像的近岸海域水質(zhì)等級遙感監(jiān)測研究
- 如何進行有針對性的復(fù)習(xí)
- 二零二五年度個人藝術(shù)品拍賣連帶擔(dān)保合同4篇
- 2025版電子產(chǎn)品售后回租業(yè)務(wù)合作協(xié)議書(全新)3篇
- 二零二五年度FBA貨運單性質(zhì)及合規(guī)性審查合同3篇
- 二零二五年度車輛租賃合同范本:全功能豪華商務(wù)版2篇
- 二零二五年度國務(wù)院辦公廳與事業(yè)單位簽訂的聘用合同樣本6篇
- 二零二五版?zhèn)€人借條格式標(biāo)準化服務(wù)合同4篇
- 馬鞍板防雷安裝施工方案
- 五年級上冊小數(shù)遞等式計算200道及答案
- 《幼兒園音樂教育活動設(shè)計與實施》讀書筆記模板
- 帶拼音生字本模板(可A4打印)
- 超高大截面框架柱成型質(zhì)量控制
- FZ/T 81013-2016寵物狗服裝
- 森林法講解課件
- JB∕T 14089-2020 袋式除塵器 濾袋運行維護技術(shù)規(guī)范
- 信用證審核課件
- 原發(fā)性膽汁性肝硬化(PBC)課件
- 美國租車自駕-中國駕照英文翻譯
- 社區(qū)經(jīng)濟基本內(nèi)涵及我國社區(qū)經(jīng)濟發(fā)展現(xiàn)狀
評論
0/150
提交評論