Java 輸入流,輸出流.ppt_第1頁(yè)
Java 輸入流,輸出流.ppt_第2頁(yè)
Java 輸入流,輸出流.ppt_第3頁(yè)
Java 輸入流,輸出流.ppt_第4頁(yè)
Java 輸入流,輸出流.ppt_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2020/11/11,第九章 Java I/0 系統(tǒng),Java程序設(shè)計(jì), ,路 強(qiáng),Chapter09 Java I/O 系統(tǒng),本章學(xué)習(xí)提示,本章我們主要學(xué)習(xí)Java語(yǔ)言的輸入輸出處理的機(jī)制 基本流的使用 字符流的使用 字節(jié)流的使用 文 件的訪問,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),常用軟件,Chapter09 Java I/O 系統(tǒng),輸入輸出類庫(kù),輸入和輸出是程序與用戶之間溝通的橋梁,程序與用戶進(jìn)行信息交互的重要手段。Java 提供了專用于輸入輸出功能的包java.io ,其中包含5個(gè)非常重要的類,所有與輸入輸出有關(guān)的類都繼承了這5

2、個(gè)類。 基本流 System.outSystem.in 字符流 Reader Writer 字節(jié)流 InputStream OutputStream 文件流 FileInputStream FileOutputStream 過濾流 FilterInputStream FilterOutputStream Java的輸入輸出是以流(stream)的方式進(jìn)行處理的。流是在計(jì)算機(jī)的 輸入、輸出操作中流動(dòng)的數(shù)據(jù)序列。Java 按流的單位分有位流(字節(jié)流)和字符流;按流動(dòng)方向分為輸入流和輸出流。,Chapter09 Java I/O 系統(tǒng),輸入流示意圖,輸出流示意圖,Chapter09 Java I/O

3、 系統(tǒng),I/O流的分類,按所讀寫的數(shù)據(jù)類型分兩類: 字符流類(Character Streams) 字符流類用于向字符流讀寫16位二進(jìn)制字符。 字節(jié)流類(Byte Streams) 字節(jié)流類用于向字節(jié)流讀寫8位二進(jìn)制的字節(jié)。一般地,字節(jié)流類主要用于讀寫諸如圖象或聲音等的二進(jìn)制數(shù)據(jù)。,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),基本流,為了減少程序開發(fā)人員,因頻繁應(yīng)用標(biāo)準(zhǔn)的輸入輸出設(shè)備,需要頻繁地建立輸入輸出流對(duì)象的工作量,java系統(tǒng)預(yù)先定義好3個(gè)流對(duì)象,分別表示標(biāo)準(zhǔn)輸出設(shè)備、標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)錯(cuò)誤設(shè)備。他們分別是: System.in :用

4、于程序的輸入; 對(duì)應(yīng)外設(shè)為鍵盤 System.out:用于一般輸出; 對(duì)應(yīng)外設(shè)為屏幕 System.err:用于顯示出錯(cuò)信息; 對(duì)應(yīng)外設(shè)為屏幕 System 類的所有屬性都是靜態(tài)static的,調(diào)用時(shí)以類名System為前綴。上述3個(gè)流對(duì)象均為靜態(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: ); /將字符串解析為帶符號(hào)的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是一個(gè)抽象類,所以實(shí)際應(yīng)用中創(chuàng)建的對(duì)象是Reader 某個(gè)子類的對(duì)象,通過該子類對(duì)象與外接數(shù)據(jù)源連接。 子類必須

8、實(shí)現(xiàn)的方法只有 int read(char b, int offset, int length) void close() 當(dāng)輸入流使用完畢后,可以調(diào)用該方法將其關(guān)閉,斷開java程序與外設(shè)數(shù)據(jù)源的聯(lián)系,釋放此連接所占用的系統(tǒng)資源,Chapter09 Java I/O 系統(tǒng),Reader常用子類,BufferedReader 從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取 可以指定緩沖區(qū)的大小 InputStreamReader 字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。 每次調(diào)用 InputStreamReader 的read()

9、 方法都會(huì)導(dǎo)致從底層輸入流讀取一個(gè)或多個(gè)字節(jié)。 FileReader 用來讀取字符文件的類 用于讀取字符流,詳細(xì)內(nèi)容見 軟件包 java.io 的Reader類,Chapter09 Java I/O 系統(tǒng),Writer類,用來以字符方式向輸出流中寫入數(shù)據(jù)。Writer類中包含了一套所有字符輸出流都需要的方法,可以完成最基本的向字符輸出流寫入數(shù)據(jù)的功能。 Writer是一個(gè)抽象類,所以實(shí)際應(yīng)用中創(chuàng)建的對(duì)象是Writer 某個(gè)子類的對(duì)象,通過該子類對(duì)象與外接數(shù)據(jù)源連接。 子類必須實(shí)現(xiàn)的方法僅有 void write(char b, int offset, int length) void clos

10、e() void flush() /強(qiáng)制清空緩沖區(qū) 當(dāng)輸入流使用完畢后,關(guān)閉輸出流,斷開java程序與外設(shè)數(shù)據(jù)源的連接,釋放所占有的系統(tǒng)資源,Chapter09 Java I/O 系統(tǒng),Writer常用子類,BufferedWriter 將文本寫入字符輸出流,緩沖各個(gè)字符 可以指定緩沖區(qū)的大小 OutputStreamWriter 字符流通向字節(jié)流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節(jié) 每次調(diào)用 write() 方法都會(huì)導(dǎo)致在給定字符(或字符集)上調(diào)用編碼轉(zhuǎn)換器 FileWriter 用來寫入字符文件的類 文件是否可用或是否可以被創(chuàng)建取決于底層平臺(tái) PrintWri

11、ter 向文本輸出流打印對(duì)象的格式化表示形式,詳細(xì)內(nèi)容見 軟件包 java.io 的Writer類,Chapter09 Java I/O 系統(tǒng),字符流之例,/輸入字符串、浮點(diǎn)數(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(輸入浮點(diǎn)數(shù)); f=Float.parseFloat(bin.readLine(); System.out.println(輸入整數(shù)); i=Integer.parseInt(bin.readLine(); System.out.println(輸入的字符串:+s); System.out.println(輸入的浮點(diǎn)數(shù):+f); System.out.println(輸入的整數(shù):+i); ,Chapter0

13、9 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),字節(jié)流,輸入流類InputStream和輸出流OutputStream是兩個(gè)最基本的輸入輸出抽象類,用于處理字節(jié)流。 InputStream類 類中包含了一套所有輸入流都需要的方法,可以完成最基本的從輸入流讀取數(shù)據(jù)的功能。 當(dāng)java程序需要從外設(shè)中讀入數(shù)據(jù)時(shí),先創(chuàng)建一個(gè)適當(dāng)類型的輸入流類對(duì)象來完成與外設(shè)的連接,然后再調(diào)用執(zhí)行該新建對(duì)象的特定方法,實(shí)現(xiàn)對(duì)相應(yīng)外設(shè)的操作。 每次執(zhí)行時(shí)都從輸入流的當(dāng)前位置處讀入一個(gè)字節(jié)的二進(jìn)制數(shù)據(jù),次數(shù)作為低字節(jié),高字節(jié)配全零,合成為一個(gè)16位整型量返回,若輸入流當(dāng)前位置無數(shù)據(jù)返回-1

14、。,Chapter09 Java I/O 系統(tǒng),字節(jié)流I/O類層次關(guān)系圖,Chapter09 Java I/O 系統(tǒng),OutputStream類,類中包含所有輸出流都要使用的方法。當(dāng)java程序需要向某外設(shè)輸出數(shù)據(jù)時(shí),先要?jiǎng)?chuàng)建一個(gè)輸出流類對(duì)象,通過該對(duì)象實(shí)現(xiàn)與外設(shè)的連接,再利用OutputStream類提供的方法將數(shù)據(jù)寫入該外設(shè)中。 OutputStream類是一個(gè)抽象類,不能直接創(chuàng)建OutputStream類對(duì)象,而應(yīng)該創(chuàng)建它的某個(gè)子類的對(duì)象。子類繼承的方法有: Write()方法、flush()方法和close()方法 public void write(int c); 將參數(shù)c對(duì)應(yīng)的字符

15、寫入輸出流 public void write(char array); 將字符數(shù)組array中全部字符順序?qū)懭氲捷敵隽?使用完畢后,應(yīng)用close()方法關(guān)閉流,Chapter09 Java I/O 系統(tǒng),OutputStream類的常用子類,ByteArrayOutputStream此類實(shí)現(xiàn)了一個(gè)輸出流,數(shù)據(jù)被寫入一個(gè) byte 數(shù)組 FileOutputStream用于將諸如圖像數(shù)據(jù)之類的原始字節(jié)的數(shù)據(jù)流寫入 File ObjectOutputStream 實(shí)現(xiàn)對(duì)象的持久存儲(chǔ),將 Java 對(duì)象的基本數(shù)據(jù)類型和圖形寫入 OutputStream PipedOutputStream 將管道

16、輸出流連接到管道輸入流來創(chuàng)建通信管道,詳細(xì)內(nèi)容見 軟件包 java.io 的OutputStream類,Chapter09 Java I/O 系統(tǒng),InputStream類的常用子類,類中包含了一套所有輸入流都需要的方法,可以完成最基本的從輸入流讀取數(shù)據(jù)的功能。 當(dāng)java程序需要從外設(shè)中讀入數(shù)據(jù)時(shí),先創(chuàng)建一個(gè)適當(dāng)類型的輸入流類對(duì)象來完成與外設(shè)的連接,然后再調(diào)用執(zhí)行該新建對(duì)象的特定方法,實(shí)現(xiàn)對(duì)相應(yīng)外設(shè)的操作。 InputStream 子類對(duì)象繼承InputStream 類的如下方法 read()方法、定位指針的方法、close()方法。 public int read() 每次執(zhí)行時(shí)都從輸入流

17、的當(dāng)前位置處讀入一個(gè)字節(jié)的二進(jìn)制數(shù)據(jù),讀數(shù)作為低字節(jié),高字節(jié)配全零,合成為一個(gè)16位整型量返回,若輸入流當(dāng)前位置無數(shù)據(jù)返回-1。 使用完畢后,應(yīng)用close()方法關(guān)閉流,Chapter09 Java I/O 系統(tǒng),InputStream 類的常用子類,ByteArrayInputStream此類實(shí)現(xiàn)了一個(gè)輸出流,從一個(gè) byte 數(shù)組中讀出數(shù)據(jù) FileInputStream用于從文件File中將諸如圖像數(shù)據(jù)之類的原始字節(jié)的數(shù)據(jù)流讀出 ObjectInputStream 實(shí)現(xiàn)對(duì)象的持久存儲(chǔ),從 OutputStream讀入Java 對(duì)象的基本數(shù)據(jù)類型和圖形,詳細(xì)內(nèi)容見 軟件包 java.io

18、 的InputStream類,Chapter09 Java I/O 系統(tǒng),目 錄,Chapter09 Java I/O 系統(tǒng),文件處理,在程序中要對(duì)磁盤文件或目錄進(jìn)行操作,首先要對(duì)文件或目錄建立連接,為此java提供了file類。 File類位于java.io包中,但不是流類,它不負(fù)責(zé)輸入或輸出,而專門用來管理磁盤文件和目錄。 類的構(gòu)造方法 FileInputStream(String fileName)參數(shù)fileName表示帶路徑的磁盤文件名 FileInputStream(File file)參數(shù)file表示為磁盤文件所建立的File對(duì)象名 在程序執(zhí)行過程中會(huì)出現(xiàn)文件找不到或讀寫錯(cuò)誤,因

19、此程序中必須要對(duì)異常進(jìn)行捕獲和處理,Chapter09 Java I/O 系統(tǒng),用File類訪問磁盤文件,問 題 如何獲取磁盤上的文件和文件夾? File類 File(Stringpathname) 通過將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建一個(gè)新 File 實(shí)例。 exists() 測(cè)試此抽象路徑名表示的文件或目錄是否存在。 canRead() 測(cè)試應(yīng)用程序是否可以讀取此抽象路徑名表示的文件。 listFiles() 返回一個(gè)抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件。 mkdir() 創(chuàng)建此抽象路徑名指定的目錄。,FileList.java,Chapter09 Java

20、 I/O 系統(tǒng),以字符流方式寫入文件,以字符流方式向文件寫入或從文件讀出數(shù)據(jù),可以使用Writer和Reader類及其子類。上述兩類是抽象類,不能建立它們的對(duì)象,只能通過它們的子類對(duì)象對(duì)文件進(jìn)行操作。常用的Writer類的子類有FileWriter類和BufferedFileWriter類。 FileWriter類構(gòu)造方法 FileWriter(String fileName);參數(shù)fileName表示帶路徑的磁盤文件名 FileWriter(File file);參數(shù)file表示為磁盤文件所建立的File對(duì)象名 使用BufferWriter類的方法是 為文件建立FileWriter對(duì)象 再為

21、該FileWriter對(duì)象建立BufferWriter類對(duì)象 寫入操作將使用所建立的BufferWriter類對(duì)象,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(輸入一個(gè)字符串: ); 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(輸入浮點(diǎn)數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論