版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、文件與IO流,2,主要內(nèi)容,流的概念流的分類流的使用(以字節(jié)流為例)標(biāo)準(zhǔn)輸入/輸出流文件輸入/輸出流字符流的使用,3,流(Stream)的概念,流是從源到目的地的有序字節(jié)序列,具有先進先出的特征。根據(jù)流與程序的關(guān)系將流分為輸入流和輸出流兩類。程序從輸入流讀取數(shù)據(jù);向輸出流寫出數(shù)據(jù)。,4,流的概念,源輸入流的源可以是文件、標(biāo)準(zhǔn)輸入(鍵盤)、其他外部輸入設(shè)備或者其他輸入流。目的地輸出流的目的地可以是文件、標(biāo)準(zhǔn)輸出(顯示器
2、)、其他外部輸出設(shè)備或者其他輸出流。Java中輸入輸出是通過流來實現(xiàn)的。相關(guān)的類都在java.io包中。,5,流的分類,輸入流/輸出流按流與程序的關(guān)系分。字節(jié)流/字符流按流中處理的數(shù)據(jù)是以字節(jié)(8位)為單位還是以字符(16位)為單位分為字節(jié)流和字符流。Java中字節(jié)流和字符流分屬兩個不同的體系。,6,字節(jié)流的層次結(jié)構(gòu),,,過濾流,結(jié)點流,抽象類,7,字符流的類層次結(jié)構(gòu),8,InputStream類的常用方法,讀一個字節(jié),并返回
3、該字節(jié)。未讀到返回-1public int read() throws IOException關(guān)閉流public void close( ) throws IOException將數(shù)據(jù)讀入字節(jié)數(shù)組b, 返回所讀的字節(jié)數(shù)int read(byte[ ] b ) throws IOException 將數(shù)據(jù)讀入字節(jié)數(shù)組b, 返回所讀的字節(jié)數(shù),offset和length指示byte[]中存放讀入字節(jié)的位置。int read
4、( byte[] b, int offset, int length ) throws IOException,9,OutputStream的常用方法,寫一個字節(jié)void write(int) throws IOException關(guān)閉輸出流void close( ) throws IOException將緩沖區(qū)的數(shù)據(jù)寫到目的地。void flush( ) throws IOException 寫一個字節(jié)數(shù)組void
5、write(byte[ ] b) throws IOException void write(byte[ ] b, int offset, int length ) throws IOException,10,標(biāo)準(zhǔn)輸入輸出流,System.out:把輸出送到缺省的顯示(通常是顯示器)System.in從標(biāo)準(zhǔn)輸入獲取輸入(通常是鍵盤)System是final類,in,out是System的靜態(tài)成員變量,因此可以用System.
6、in等形式直接使用。,11,標(biāo)準(zhǔn)輸入 System.in,在System中,in的完整定義是:public static final InputStream in;in的主要方法:public int read() throws IOExceptionpublic int read(byte [] b) throws IOException使用注意事項:前者返回讀入的一字節(jié)的數(shù)據(jù),但返回的是int整型值,取值范圍是0-255
7、。后者返回讀入的字節(jié)數(shù),讀入的各字節(jié)保存在作為參數(shù)的字節(jié)型數(shù)組對象中。執(zhí)行read時,程序會等待用戶的輸入。輸入完成后再接著執(zhí)行后面的語句。,12,流的使用過程,輸入/輸出流的使用過程:實例化一個輸入/輸出流對象使用該輸入/輸出流對象的方法讀入/寫出數(shù)據(jù)關(guān)閉該輸入/輸出流對象注意事項輸入/輸出流的方法會拋出異常,因此必須進行異常處理。標(biāo)準(zhǔn)輸入/輸出流對象System.in, System.out始終存在,不需要實例化,
8、也不需要關(guān)閉。,13,例:使用System.in實現(xiàn)鍵盤數(shù)據(jù)輸入,import java.io.*;public class TestInput { public static void main(String [] args) {try { byte bArray[]=new byte[128]; System.out.println("請輸入一些東西:&quo
9、t;); System.in.read(bArray); String s= new String(bArray,0,bArray.length).trim(); System.out.println("你輸入的是:"+s); } catch(IOException ioe) { System.out.println(ioe.toStr
10、ing()); } }},14,從文件讀數(shù)據(jù):FileInputStream,FileInputStream是InputStream的子類,可以生成實例。 FileInputStream有三個構(gòu)造方法,最常用的構(gòu)造方法如下:Public FileInputStream(String fileName) throws FileNotFoundExceptionPublic FileInputStream(File file)
11、 throws FileNotFoundExceptionfileName用來指定輸入文件名及其路徑,file是一個File對象,15,例:讀出一個文本文件的內(nèi)容并顯示,import java.io.*;class ReadFromFile {public static void main(String[] args) {InputStream in; try{in=new FileInputS
12、tream("test.txt");int aByte;aByte=in.read();while (aByte!=-1){System.out.print((char)aByte);aByte=in.read();}in.close();}catch(FileNotFoundException e){System.out.println
13、("當(dāng)前目錄下文件test.txt不存在!");}catch(IOException e){System.out.println("發(fā)生輸入輸出錯誤!");}}},16,向文件寫數(shù)據(jù):FileOutputStream,FileOutputStream是OutputStream的子類,可以生成實例。 FileOutputStream有5個構(gòu)造方法,最常用的構(gòu)造方法如下:Public F
14、ileOutputStream(String name) throws FileNotFoundException和Public FileOutputStream(String name,boolean append) throws FileNotFoundExceptionName用來指定輸入文件名及其路徑,append為true時數(shù)據(jù)將添加到文件已有內(nèi)容的末尾。,17,例題:使用FileOutputStream實現(xiàn)文件復(fù)制。
15、,import java.io.*;class CopyAFile {public static void main(String[] args) {InputStream in;OutputStream out;try{in=new FileInputStream("test.txt");out=new FileOutputStream("copyRes
16、ult.txt");int aByte;aByte=in.read();while (aByte!=-1){out.write(aByte);aByte=in.read();}in.close();out.close();System.out.println("文件復(fù)制完畢。test.txt已經(jīng)復(fù)制到copyResult.txt中。&
17、quot;);}catch(FileNotFoundException e){System.out.println("當(dāng)前目錄下文件test.txt不存在!");}catch(IOException e){System.out.println("發(fā)生輸入輸出錯誤!");}}},18,BufferedInputStream,數(shù)據(jù)流從原始
18、流成塊讀入數(shù)據(jù),放在一個內(nèi)部字節(jié)數(shù)組中。通過減少IO次數(shù)提高效率。構(gòu)造方法BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int buffersize) 基本方法:int read() throws IOExceptionint read(byte[], int offset, int length)
19、 throws IOExceptionvoid close() throws IOException,19,BufferedOutputStream,將數(shù)據(jù)積累到一個大數(shù)據(jù)塊后再成批輸出。通過減少IO次數(shù)提高效率。構(gòu)造方法:BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out, int buffers
20、ize) 基本方法:void write(int c) throws IOExceptionvoid write(byte[ ], int offset, int length ) throws IOExceptionvoid close() throws IOException,20,例子:緩沖數(shù)據(jù)輸入流,import java.io.*;class TestBufferedInput {public static v
21、oid main(String[] args) throws IOException{InputStream in;in=new BufferedInputStream(new FileInputStream("test.txt"));int aByte;aByte=in.read();while (aByte!=-1){System.out.print((char)a
22、Byte);aByte=in.read();}in.close();}},21,? 按java的基本數(shù)據(jù)類型讀寫流中的數(shù)據(jù):DataInputStream方法 byte readByte( )boolean readBoolean( ) long readLong( )char readChar( ) double readDouble( )float readFloa
23、t( ) short readshort( )int readInt( ) String readUTF( )//讀取以UTF格式保存的字符串DataOutputStream 方法 void writeByte(byte)void writeBoolean(boolean) void writeLong( long )void writeChar(char) void writeDo
24、uble(double)void writeFloat( float) void writeshort(short)void writeInt ( int) void writeBytes(String)void writeChars(String ) void WriteUTF(String str)//將字符串以UTF格式寫出,數(shù)據(jù)輸入輸出流,22,例子:數(shù)據(jù)輸入輸出流,//使用DataOutp
25、utStream將一些數(shù)據(jù)寫入文件,再用DataInputStream讀入//DataIOTeat.javaimport java.io.*;public class DataIOTest { public static void main(String[] args) throws IOException { DataOutputStream out = new DataOutputStream(new
26、 FileOutputStream("invoice.txt")); double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; int[] units = { 12, 8, 13, 29, 50 }; String[] descs = { "Java T-shirt", "
27、Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" };,23,for (int i = 0; i < prices.length; i ++) { out.writeDouble(prices[i]);
28、out.writeChar('\t'); out.writeInt(units[i]); out.writeChar('\t'); out.writeUTF(descs[i]); out.writeChar('\n'); } out.close();
29、 // read it in again DataInputStream in = new DataInputStream(new FileInputStream("invoice.txt")); double price; int unit; String desc; double total = 0.0;,24,for
30、(int i = 0; i < prices.length; i ++) { price = in.readDouble(); in.readChar(); // 讀入tab鍵 unit = in.readInt(); in.readChar(); //讀入tab鍵
31、 desc = in.readUTF(); in.readChar(); //讀入tab鍵 System.out.println("You've ordered " + unit + " units of " + desc + &qu
32、ot; at $" + price); total = total + unit * price; } System.out.println("For a TOTAL of: $" + total); in.close(); }},25,字符流,? Reader和Writer是兩個字符流的頂層抽象類。
33、定義了讀寫16位字符的通用API。能夠處理Unicode的所有字符。? Reader和Writer 類實現(xiàn)字節(jié)和字符間的自動轉(zhuǎn)換。如果是讀寫文本類的數(shù)據(jù)使用字符流更佳。,26,字符流的常用類,輸入流FileReaderInputStreamReaderBufferedReader輸出流FileWriterOutputStreamWriterBufferedWriter,27,使用字符輸入流從文件讀取,import ja
34、va.io.*;public class StandardIO{public static void main(String[] args){try{FileReader in = new FileReader ("test.txt");for(int i=in.read();i!=-1;i=in.read())System.out.print((char)i);
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 02文件管理與統(tǒng)計
- 08文件控制
- java實驗指導(dǎo)(4)-io流
- 20061127165707文件答疑紀要02
- 總后財[2009]1110文件
- 2.3.1文件及其類型---教案
- 質(zhì)量手冊主題4.3文件控制
- EBZ160.01文件目錄.xls
- 4文件和資料的控制
- EBZ160.01文件目錄.xls
- EBZ160.01文件目錄.xls
- 基于FAT32文件系統(tǒng)的文件隱藏研究與實現(xiàn).pdf
- 倉庫管理規(guī)范 iso9001文件
- nba2k11文件代碼
- 20061127165707文件答疑紀要02.doc
- ts16949文件(全套質(zhì)量手冊、程序文件、表單)
- 16949文件編制方法講義幻燈片
- 31文件服務(wù)器理論講解
- 案例3文件傳輸錯誤導(dǎo)致包文件加載失敗
- 2.4.1文件和資料發(fā)放回收記錄
評論
0/150
提交評論