




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、2020/11/11,第九章 Java I/0 系統(tǒng),Java程序設計, ,路 強,Chapter09 Java I/O 系統(tǒng),本章學習提示,本章我們主要學習Java語言的輸入輸出處理的機制 基本流的使用 字符流的使用 字節(jié)流的使用 文 件的訪問,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),常用軟件,Chapter09 Java I/O 系統(tǒng),輸入輸出類庫,輸入和輸出是程序與用戶之間溝通的橋梁,程序與用戶進行信息交互的重要手段。Java 提供了專用于輸入輸出功能的包java.io ,其中包含5個非常重要的類,所有與輸入輸出有關(guān)的類都繼承了這5
2、個類。 基本流 System.outSystem.in 字符流 Reader Writer 字節(jié)流 InputStream OutputStream 文件流 FileInputStream FileOutputStream 過濾流 FilterInputStream FilterOutputStream Java的輸入輸出是以流(stream)的方式進行處理的。流是在計算機的 輸入、輸出操作中流動的數(shù)據(jù)序列。Java 按流的單位分有位流(字節(jié)流)和字符流;按流動方向分為輸入流和輸出流。,Chapter09 Java I/O 系統(tǒng),輸入流示意圖,輸出流示意圖,Chapter09 Java I/O
3、 系統(tǒng),I/O流的分類,按所讀寫的數(shù)據(jù)類型分兩類: 字符流類(Character Streams) 字符流類用于向字符流讀寫16位二進制字符。 字節(jié)流類(Byte Streams) 字節(jié)流類用于向字節(jié)流讀寫8位二進制的字節(jié)。一般地,字節(jié)流類主要用于讀寫諸如圖象或聲音等的二進制數(shù)據(jù)。,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),基本流,為了減少程序開發(fā)人員,因頻繁應用標準的輸入輸出設備,需要頻繁地建立輸入輸出流對象的工作量,java系統(tǒng)預先定義好3個流對象,分別表示標準輸出設備、標準輸入設備和標準錯誤設備。他們分別是: System.in :用
4、于程序的輸入; 對應外設為鍵盤 System.out:用于一般輸出; 對應外設為屏幕 System.err:用于顯示出錯信息; 對應外設為屏幕 System 類的所有屬性都是靜態(tài)static的,調(diào)用時以類名System為前綴。上述3個流對象均為靜態(tài)屬性。,Chapter09 Java I/O 系統(tǒng),基本I/O之例,/從鍵盤輸入字符,然后在屏幕上顯示輸入結(jié)果 import java.io.*; public class standardIO public static void main(String args) throws IOException /IO操作必須捕獲IO異常 char c;
5、System.out.println(輸入任一字符 ); c=(char)System.in.read(); System.out.println(輸入的字符是 :+c); ,Chapter09 Java I/O 系統(tǒng),基本IO之例,/基本IO standardIO2.java,從命令行讀入字符串,并處理和顯示 import java.io.*; public class standardIO public static void main(String args) throws IOException /IO操作必須捕獲IO異常 /先使用System.in構(gòu)造InputStreamReade
6、r,再構(gòu)造BufferedReader。 InputStreamReader iin = new InputStreamReader(System.in); BufferedReader stdin=new BufferedReader(iin); /讀取并輸出字符串。 System.out.print(Enter a string: ); System.out.println(stdin.readLine(); /讀取字符串并轉(zhuǎn)換成double類型數(shù)據(jù)輸出 System.out.print(Enter a double: ); /將字符串解析為帶符號的double類型數(shù)據(jù)。 double n
7、umber2=Double.parseDouble(stdin.readLine(); System.out.println(number2); ,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),Unicode字符流I/O類層次關(guān)系圖,Chapter09 Java I/O 系統(tǒng),Reader類,用來以字符方式從流中讀入數(shù)據(jù)。 Reader類中包含了一套所有字符輸入流都需要的方法,可以完成最基本的從字符輸入流讀取數(shù)據(jù)的功能。 Reader是一個抽象類,所以實際應用中創(chuàng)建的對象是Reader 某個子類的對象,通過該子類對象與外接數(shù)據(jù)源連接。 子類必須
8、實現(xiàn)的方法只有 int read(char b, int offset, int length) void close() 當輸入流使用完畢后,可以調(diào)用該方法將其關(guān)閉,斷開java程序與外設數(shù)據(jù)源的聯(lián)系,釋放此連接所占用的系統(tǒng)資源,Chapter09 Java I/O 系統(tǒng),Reader常用子類,BufferedReader 從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取 可以指定緩沖區(qū)的大小 InputStreamReader 字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。 每次調(diào)用 InputStreamReader 的read()
9、 方法都會導致從底層輸入流讀取一個或多個字節(jié)。 FileReader 用來讀取字符文件的類 用于讀取字符流,詳細內(nèi)容見 軟件包 java.io 的Reader類,Chapter09 Java I/O 系統(tǒng),Writer類,用來以字符方式向輸出流中寫入數(shù)據(jù)。Writer類中包含了一套所有字符輸出流都需要的方法,可以完成最基本的向字符輸出流寫入數(shù)據(jù)的功能。 Writer是一個抽象類,所以實際應用中創(chuàng)建的對象是Writer 某個子類的對象,通過該子類對象與外接數(shù)據(jù)源連接。 子類必須實現(xiàn)的方法僅有 void write(char b, int offset, int length) void clos
10、e() void flush() /強制清空緩沖區(qū) 當輸入流使用完畢后,關(guān)閉輸出流,斷開java程序與外設數(shù)據(jù)源的連接,釋放所占有的系統(tǒng)資源,Chapter09 Java I/O 系統(tǒng),Writer常用子類,BufferedWriter 將文本寫入字符輸出流,緩沖各個字符 可以指定緩沖區(qū)的大小 OutputStreamWriter 字符流通向字節(jié)流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節(jié) 每次調(diào)用 write() 方法都會導致在給定字符(或字符集)上調(diào)用編碼轉(zhuǎn)換器 FileWriter 用來寫入字符文件的類 文件是否可用或是否可以被創(chuàng)建取決于底層平臺 PrintWri
11、ter 向文本輸出流打印對象的格式化表示形式,詳細內(nèi)容見 軟件包 java.io 的Writer類,Chapter09 Java I/O 系統(tǒng),字符流之例,/輸入字符串、浮點數(shù)、整數(shù)在屏幕上顯示輸入結(jié)果 import java.io.*; public class standardIO3 public static void main(String args) throws IOException InputStreamReader iin=new InputStreamReader(System.in); BufferedReader bin=new BufferedReader(iin);
12、 String s; float f; int i=0; System.out.println(輸入任一字符串); s=bin.readLine(); System.out.println(輸入浮點數(shù)); f=Float.parseFloat(bin.readLine(); System.out.println(輸入整數(shù)); i=Integer.parseInt(bin.readLine(); System.out.println(輸入的字符串:+s); System.out.println(輸入的浮點數(shù):+f); System.out.println(輸入的整數(shù):+i); ,Chapter0
13、9 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),字節(jié)流,輸入流類InputStream和輸出流OutputStream是兩個最基本的輸入輸出抽象類,用于處理字節(jié)流。 InputStream類 類中包含了一套所有輸入流都需要的方法,可以完成最基本的從輸入流讀取數(shù)據(jù)的功能。 當java程序需要從外設中讀入數(shù)據(jù)時,先創(chuàng)建一個適當類型的輸入流類對象來完成與外設的連接,然后再調(diào)用執(zhí)行該新建對象的特定方法,實現(xiàn)對相應外設的操作。 每次執(zhí)行時都從輸入流的當前位置處讀入一個字節(jié)的二進制數(shù)據(jù),次數(shù)作為低字節(jié),高字節(jié)配全零,合成為一個16位整型量返回,若輸入流當前位置無數(shù)據(jù)返回-1
14、。,Chapter09 Java I/O 系統(tǒng),字節(jié)流I/O類層次關(guān)系圖,Chapter09 Java I/O 系統(tǒng),OutputStream類,類中包含所有輸出流都要使用的方法。當java程序需要向某外設輸出數(shù)據(jù)時,先要創(chuàng)建一個輸出流類對象,通過該對象實現(xiàn)與外設的連接,再利用OutputStream類提供的方法將數(shù)據(jù)寫入該外設中。 OutputStream類是一個抽象類,不能直接創(chuàng)建OutputStream類對象,而應該創(chuàng)建它的某個子類的對象。子類繼承的方法有: Write()方法、flush()方法和close()方法 public void write(int c); 將參數(shù)c對應的字符
15、寫入輸出流 public void write(char array); 將字符數(shù)組array中全部字符順序?qū)懭氲捷敵隽?使用完畢后,應用close()方法關(guān)閉流,Chapter09 Java I/O 系統(tǒng),OutputStream類的常用子類,ByteArrayOutputStream此類實現(xiàn)了一個輸出流,數(shù)據(jù)被寫入一個 byte 數(shù)組 FileOutputStream用于將諸如圖像數(shù)據(jù)之類的原始字節(jié)的數(shù)據(jù)流寫入 File ObjectOutputStream 實現(xiàn)對象的持久存儲,將 Java 對象的基本數(shù)據(jù)類型和圖形寫入 OutputStream PipedOutputStream 將管道
16、輸出流連接到管道輸入流來創(chuàng)建通信管道,詳細內(nèi)容見 軟件包 java.io 的OutputStream類,Chapter09 Java I/O 系統(tǒng),InputStream類的常用子類,類中包含了一套所有輸入流都需要的方法,可以完成最基本的從輸入流讀取數(shù)據(jù)的功能。 當java程序需要從外設中讀入數(shù)據(jù)時,先創(chuàng)建一個適當類型的輸入流類對象來完成與外設的連接,然后再調(diào)用執(zhí)行該新建對象的特定方法,實現(xiàn)對相應外設的操作。 InputStream 子類對象繼承InputStream 類的如下方法 read()方法、定位指針的方法、close()方法。 public int read() 每次執(zhí)行時都從輸入流
17、的當前位置處讀入一個字節(jié)的二進制數(shù)據(jù),讀數(shù)作為低字節(jié),高字節(jié)配全零,合成為一個16位整型量返回,若輸入流當前位置無數(shù)據(jù)返回-1。 使用完畢后,應用close()方法關(guān)閉流,Chapter09 Java I/O 系統(tǒng),InputStream 類的常用子類,ByteArrayInputStream此類實現(xiàn)了一個輸出流,從一個 byte 數(shù)組中讀出數(shù)據(jù) FileInputStream用于從文件File中將諸如圖像數(shù)據(jù)之類的原始字節(jié)的數(shù)據(jù)流讀出 ObjectInputStream 實現(xiàn)對象的持久存儲,從 OutputStream讀入Java 對象的基本數(shù)據(jù)類型和圖形,詳細內(nèi)容見 軟件包 java.io
18、 的InputStream類,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),文件處理,在程序中要對磁盤文件或目錄進行操作,首先要對文件或目錄建立連接,為此java提供了file類。 File類位于java.io包中,但不是流類,它不負責輸入或輸出,而專門用來管理磁盤文件和目錄。 類的構(gòu)造方法 FileInputStream(String fileName)參數(shù)fileName表示帶路徑的磁盤文件名 FileInputStream(File file)參數(shù)file表示為磁盤文件所建立的File對象名 在程序執(zhí)行過程中會出現(xiàn)文件找不到或讀寫錯誤,因
19、此程序中必須要對異常進行捕獲和處理,Chapter09 Java I/O 系統(tǒng),用File類訪問磁盤文件,問 題 如何獲取磁盤上的文件和文件夾? File類 File(Stringpathname) 通過將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建一個新 File 實例。 exists() 測試此抽象路徑名表示的文件或目錄是否存在。 canRead() 測試應用程序是否可以讀取此抽象路徑名表示的文件。 listFiles() 返回一個抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件。 mkdir() 創(chuàng)建此抽象路徑名指定的目錄。,FileList.java,Chapter09 Java
20、 I/O 系統(tǒng),以字符流方式寫入文件,以字符流方式向文件寫入或從文件讀出數(shù)據(jù),可以使用Writer和Reader類及其子類。上述兩類是抽象類,不能建立它們的對象,只能通過它們的子類對象對文件進行操作。常用的Writer類的子類有FileWriter類和BufferedFileWriter類。 FileWriter類構(gòu)造方法 FileWriter(String fileName);參數(shù)fileName表示帶路徑的磁盤文件名 FileWriter(File file);參數(shù)file表示為磁盤文件所建立的File對象名 使用BufferWriter類的方法是 為文件建立FileWriter對象 再為
21、該FileWriter對象建立BufferWriter類對象 寫入操作將使用所建立的BufferWriter類對象,Chapter09 Java I/O 系統(tǒng),以字符流方式寫入文件 例程,1 .從命令行讀入字符串,2 .將字符串寫入到磁盤文件,以字符流的方式從命令行讀入多行字符, 并按行寫入磁盤文件 F:dataFile.txt,Chapter09 Java I/O 系統(tǒng),字符流的方式寫入磁盤文件,/以字符流的方式寫入磁盤文件c:dataFile.txt中 import java.io.*; public class FileIO3_write public static void main(
22、String args)throws IOException InputStreamReader iin=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(iin); FileWriter fw1=new FileWriter(c:dataFile.txt); BufferedWriter bw=new BufferedWriter(fw1); String s; System.out.println(將輸入的字符串寫入dataFile.txt文件); while(true) System.out.pr
23、intln(輸入一個字符串: ); System.out.flush();/ 清空輸出緩沖區(qū) s=br.readLine(); /寫入換行符 if(s.length()=0)break; bw.write(s); bw.newLine(); bw.close(); ,Chapter09 Java I/O 系統(tǒng),以字符流的方式向顯示器輸出,/本程序的功能是以字符流的方式向顯示器輸出, /將 c:dataFile.txt數(shù)據(jù)顯示到屏幕上 import java.io.*; public class FileIO3_read public static void main(String args)t
24、hrows IOException FileReader fr1=new FileReader(c:dataFile.txt); BufferedReader br1=new BufferedReader(fr1); BufferedWriter bw1=new BufferedWriter(new OutputStreamWriter(System.out); int lineNum=0; String s=br1.readLine(); System.out.println(輸入文件是:c:dataFile.txt); while(s!=null) lineNum+; bw1.write(
25、String.valueOf(lineNum); bw1.write( ); bw1.write(s); bw1.newLine(); / System.out.println(s); s=br1.readLine(); bw1.close(); ,Chapter09 Java I/O 系統(tǒng),字符流的方式轉(zhuǎn)存文件,/以字符流的方式讀取文件, /將c:dataFile.txt數(shù)據(jù)備份到targetFile.txt中 import java.io.*; public class FileIO3_restore public static void main(String args)throws I
26、OException FileReader fr1=new FileReader(c:dataFile.txt); BufferedReader br1=new BufferedReader(fr1); BufferedWriter bw1=new BufferedWriter(new FileWriter(c:targetFile.txt); int lineNum=0; String s=br1.readLine(); System.out.println(輸入文件是:c:dataFile.txt); System.out.println(輸出文件是:c:targetFile.txt);
27、while(s!=null) lineNum+; bw1.write(String.valueOf(lineNum); bw1.write( ); bw1.write(s); bw1.newLine(); s=br1.readLine(); bw1.close(); ,Chapter09 Java I/O 系統(tǒng),向磁盤文件寫入各類數(shù)據(jù),Java 通過DataInputStream public class FileIO2_write public static void main(String args)throws IOException int ch; InputStreamReader
28、iin=new InputStreamReader(System.in); BufferedReader bin=new BufferedReader(iin); File file1=new File(“c:dataInFile.txt); try FileOutputStream fout=new FileOutputStream(file1); DataOutputStream dout=new DataOutputStream(fout); System.out.println(輸入整數(shù) ); int i=Integer.parseInt(bin.readLine(); System.
29、out.println(輸入浮點數(shù) ); float f=Float.parseFloat(bin.readLine(); System.out.println(輸入布爾量 ); boolean b=new Boolean(bin.readLine().booleanValue(); System.out.println(輸入結(jié)果在c:dataInFile.txt文件中 ); dout.writeInt(i); dout.writeFloat(f); dout.writeBoolean(b); dout.close(); catch(FileNotFoundException e) System.out.println(e); catch(IOException e) System.out.println(e); ,Chapter09 Java I/O 系統(tǒng),從磁盤文件讀出數(shù)據(jù)并轉(zhuǎn)存,import java.io.*; public class FileIO2_read public static void main(String args)throws IOException int ch; File file1=new File(c:dataInFile.txt); File file2=new File(c:dataOutFile.txt); try Fi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出國勞務合同樣本樣本
- 內(nèi)部股東股權(quán)轉(zhuǎn)讓合同樣本
- 軍訓服合同樣本
- 公司在蓋房合同樣本
- 交易所網(wǎng)簽合同樣本
- 五金合作合同標準文本
- 年度工作計劃的調(diào)整與反饋
- 200字雇傭合同樣本
- 出售合同樣本寫
- 第14講 人體生命活動的調(diào)節(jié)與人類活動對生物圈的影響 2025年會考生物學專題練習(含答案)
- 2025年全國愛衛(wèi)生日健康教育宣傳主題班會課件
- 浙江省臺州市和合聯(lián)盟2023-2024學年八年級下學期期中考試數(shù)學試題(含答案)
- 中學生春季傳染病預防知識
- 蒙古語中的時間表達方式研究論文
- (一模)南京市、鹽城市2025屆高三年級第一次模擬考試歷史試卷(含官方答案)
- 2025年焦作工貿(mào)職業(yè)學院單招職業(yè)技能考試題庫附答案
- 2025年塔里木職業(yè)技術(shù)學院單招職業(yè)技能測試題庫完美版
- 清明節(jié)假期安全教育主題班會 課件
- 倒閘操作考試試題及答案
- 專題5 壓強 2021年和2022年四川省成都市中考物理模擬試題匯編
- 【數(shù)學】三角形 問題解決策略:特殊化課件2024-2025學年北師大版數(shù)學七年級下冊
評論
0/150
提交評論