第09章-文件輸入輸出_第1頁
第09章-文件輸入輸出_第2頁
第09章-文件輸入輸出_第3頁
第09章-文件輸入輸出_第4頁
第09章-文件輸入輸出_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第 9 講講 JAVA輸入輸出類輸入輸出類(java.io 包)第第 9 講講學習目標學習目標n理解流,標準輸入理解流,標準輸入/輸出流輸出流的概念的概念n運用運用File類進行文件操作類進行文件操作n運用運用FileInputStream和和FileOutputStream類類讀寫文本文件讀寫文本文件n運用運用BufferedReader和和BufferedWriter類讀寫類讀寫文本文件文本文件n運用運用DataInputStream和和DataOutputStream類讀寫二進制文件類讀寫二進制文件信息輸入輸入設備內存儲器計算運算器結果輸出設備計算結果寫外存儲器讀計算機內存與外存計算機

2、內存與外存 要處理的信息存要處理的信息存放在放在 ”變量變量”中中, 當程序運行結束當程序運行結束或停電時或停電時,信息丟失信息丟失 所有的信息以所有的信息以”文件文件”的方式存儲的方式存儲在外存中在外存中, 可以長可以長期保存期保存那么那么,(1)如何通過鍵盤輸入信息如何通過鍵盤輸入信息(數(shù)據(jù)數(shù)據(jù));(2)如何通過顯示器輸出數(shù)據(jù)如何通過顯示器輸出數(shù)據(jù)(信息信息)(3)什么是文件什么是文件?(4) 程序是如何通過程序是如何通過”讀讀”或或”寫寫” 對文件進行操作的呢對文件進行操作的呢?輸入輸出n輸入輸出是計算機系統(tǒng)與外界交換信息的途徑,其輸入輸出是計算機系統(tǒng)與外界交換信息的途徑,其輸入、輸出過

3、程采用輸入、輸出過程采用“流流”的形式。的形式。 n流流n在在Java中,所有中,所有輸入和輸出操作輸入和輸出操作都是以都是以數(shù)據(jù)流數(shù)據(jù)流(stream)形式進行的。)形式進行的。n按照數(shù)據(jù)的傳輸方向,流分為按照數(shù)據(jù)的傳輸方向,流分為輸入流輸入流和和輸出流輸出流。n按照流動類型又分為按照流動類型又分為字節(jié)流字節(jié)流和和字符流字符流。流 3-1n流是指一連串流動的流是指一連串流動的字符,是以先進先出方先進先出方式發(fā)送信息式發(fā)送信息的通道InputStreamOutputStream來自數(shù)據(jù)源的數(shù)據(jù)流來自數(shù)據(jù)源的數(shù)據(jù)流流向目的地的數(shù)據(jù)流流向目的地的數(shù)據(jù)流AECDBF流 3-2流 3-3nJava流的

4、分類n字節(jié)流字節(jié)流 8 位位 InputStream (輸入字節(jié)流輸入字節(jié)流) OutputStream(輸出字節(jié)流輸出字節(jié)流)n字符流()字符流() 16 位位 Unicode Reader (輸入字符流輸入字符流) Writer(輸出字符流輸出字符流)輸入輸出類n輸出操作輸出操作n輸出信息到屏幕輸出信息到屏幕n輸出信息到文件輸出信息到文件n輸入操作輸入操作n從鍵盤上讀取信息從鍵盤上讀取信息n讀取文件內容讀取文件內容1. I/O控制臺(鍵盤/顯示器) 1 在在JAVA語言中:語言中: 一般通過一般通過“鍵盤鍵盤”輸入所需要的信息(數(shù)據(jù));輸入所需要的信息(數(shù)據(jù)); 通過通過“顯示器顯示器”顯

5、示(輸出)運算結果。顯示(輸出)運算結果。2 通過鍵盤、顯示器,輸入通過鍵盤、顯示器,輸入/輸出信息通常稱為輸出信息通常稱為I/O控制臺;控制臺;3 三種標準的輸入三種標準的輸入/輸出設備輸出設備 (1)System.out 提供向提供向“標準輸出標準輸出”寫出數(shù)據(jù)的功能(顯示器)寫出數(shù)據(jù)的功能(顯示器) (2)System.in 提供從提供從“標準輸入標準輸入”讀入數(shù)據(jù)的功能(鍵盤)讀入數(shù)據(jù)的功能(鍵盤) (3) System.err提供向提供向“標準錯誤輸出標準錯誤輸出”寫出數(shù)據(jù)的功能(顯示寫出數(shù)據(jù)的功能(顯示器)器)本次課的最后再詳細講解本次課的最后再詳細講解!一、流的基本概念和性質(1

6、)流)流: 流是指一組有順序的、有起點和終點的流是指一組有順序的、有起點和終點的字節(jié)字節(jié)或或字符字符集合;集合;(2)按流向分類:)按流向分類: 輸入流:輸入流: 輸出流:輸出流:(3)流的基本操作:)流的基本操作: 讀操作:從流中取得數(shù)據(jù)的操作;對輸入流只能進行讀操作。讀操作:從流中取得數(shù)據(jù)的操作;對輸入流只能進行讀操作。 寫操作:向流中添加數(shù)據(jù)的操作;對輸出流只能進行寫操作寫操作:向流中添加數(shù)據(jù)的操作;對輸出流只能進行寫操作。(4)流采用緩沖區(qū)技術: 流進行讀寫操作的流進行讀寫操作的單位是字節(jié)或字符單位是字節(jié)或字符,即一次可以寫入一個字節(jié)(字,即一次可以寫入一個字節(jié)(字符),或讀取一個字節(jié)

7、(字符);符),或讀取一個字節(jié)(字符); 為了提高效率,設置一個緩沖區(qū),一次可以讀為了提高效率,設置一個緩沖區(qū),一次可以讀/寫若干字節(jié)(字符)寫若干字節(jié)(字符),配備緩沖區(qū)的流,稱為,配備緩沖區(qū)的流,稱為緩沖流(緩沖流(Bufferd Stream)。 特別注意:在進行,寫操作時:特別注意:在進行,寫操作時: 當緩沖區(qū)滿后,系統(tǒng)自動傳到相應的輸出設備,當緩沖區(qū)滿后,系統(tǒng)自動傳到相應的輸出設備, 不滿時,要進行傳到相應的輸出設備,需要發(fā)不滿時,要進行傳到相應的輸出設備,需要發(fā)傳輸操作(傳輸操作(flush)。)。(5)流的作用:)流的作用: 程序中,需要程序中,需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用

8、不同的流根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。(6)流類:)流類: 字節(jié)流字節(jié)流: 以字節(jié)作為流中元素的基本類型,每次讀寫的最小單位以字節(jié)作為流中元素的基本類型,每次讀寫的最小單位是一個字節(jié),是一個字節(jié), 字節(jié)輸入流是字節(jié)輸入流是InputStream類及其子類;類及其子類; 字節(jié)輸出流是字節(jié)輸出流是OutputStream類及其子類;類及其子類; 字符流字符流: 以字符作為流中元素的基本類型,每次讀寫的最小單位以字符作為流中元素的基本類型,每次讀寫的最小單位是一個字符(是一個字符(2個字節(jié)的個字節(jié)的Unicode碼),碼), 字符輸入流是字符輸入流是Reader類及其子類;類及其子類; 字

9、符輸出流是字符輸出流是Writer類及其子類;類及其子類; 字節(jié)流與字符流之間的橋梁流:字節(jié)流與字符流之間的橋梁流: InputStreamReader: 將將字節(jié)流字節(jié)流轉換為轉換為字符流字符流輸入;輸入; OutputStreamWriter:將:將字符流字符流轉換為轉換為字節(jié)流字節(jié)流輸出;輸出; 二、文件的概念及其文件類-教材9.6節(jié) 1 1 文件文件 所謂所謂“文件文件”,是指記錄在外部介質上的數(shù)據(jù)集合。存儲在磁盤中,是指記錄在外部介質上的數(shù)據(jù)集合。存儲在磁盤中的文件叫磁盤文件,簡稱文件。每個文件具有唯一的文件標識,即文件的文件叫磁盤文件,簡稱文件。每個文件具有唯一的文件標識,即文件全

10、稱。全稱。 Windows環(huán)境下的文件格式為:環(huán)境下的文件格式為: 文件路徑文件路徑文件名文件名 (1)文件路徑:)文件路徑: 由磁盤盤符和文件夾名構成。由磁盤盤符和文件夾名構成。 (2)文件名:)文件名: 由主文件名和擴展名構成。由主文件名和擴展名構成。 例如:例如:d:vbcj.dat 表示文件表示文件cj.dat存放在存放在D盤的盤的vb文件夾中,文件夾中, 文件名為:文件名為:CJ;文件的擴展名為;文件的擴展名為.dat。 JAVA語言中,語言中,文件格式為:文件路徑文件格式為:文件路徑文件名文件名 例如例如: d:vbcj.dat2 File類與文件操作nFile類 文件類是一個類,

11、它必須包含:屬性、構造方法,一般方文件類是一個類,它必須包含:屬性、構造方法,一般方法。法。問題:問題: 文件的文件的屬型有那些屬型有那些? 文件類的文件類的構造方法有幾個構造方法有幾個,每個什么格式?,每個什么格式? 對文件進行操作的對文件進行操作的方法有那些,都有什么操作方法有那些,都有什么操作?注意:注意:nFile:以以文件路徑名文件路徑名的形式代表一個文件;的形式代表一個文件; (文件與文件夾的區(qū)別)(文件與文件夾的區(qū)別)n要對文件進行操作,必須找到該文件要對文件進行操作,必須找到該文件 (通過文件的路徑名找);(通過文件的路徑名找);n要進行操作,必須找到或給出文件,并形成文件對象

12、要進行操作,必須找到或給出文件,并形成文件對象 (調用文件類的構造方法)(調用文件類的構造方法)下面通過構造方法,來理解上面的三個注意。下面通過構造方法,來理解上面的三個注意。nFile( String pathname) nFile f=new File(“c:datatemp.dat”);nFile f=new File(“data temp.dat”);nFile f=new File(“temp.dat”);nFile( String parent, String child) nFile f=new File(“c:data” ,“temp.dat”);nFile f=new Fil

13、e(“data ” ,“ temp.dat”);nFile( File parent, String child) nFile f=new File( new File(“c:data”) ,“temp.dat”);nFile f=new File(new File(“data ”) ,“ temp.dat”);(1) File類類構造方法(構造方法(3種)種)(2) File類類文件的屬性文件的屬性n文件名;文件名;n路徑;路徑;n文件字節(jié)數(shù)(文件長度);文件字節(jié)數(shù)(文件長度);n文件最后修改時間;文件最后修改時間;n文件只讀性;文件只讀性;n文件隱藏性;文件隱藏性;n文件只寫性;文件只寫性

14、;等等等等nboolean canRead() nboolean canWrite() nboolean setReadOnly()nboolean exists() nboolean isDirectory() nboolean isFile() nboolean isHidden() nlong lastModified() nboolean setLastModified(long time)nlong length() (3) File類操作類操作方法方法n boolean createNewFile() n boolean delete() n boolean renameTo(Fi

15、le dest) nString getName() nFile getParentFile() nString getParent() nString getPath() nFile getAbsoluteFile() nString getAbsolutePath()(3) File類操作類操作方法方法(續(xù)續(xù))3 File類應用舉例例例9-21:File 類的一個簡單應用,其作用是判斷所指定的文件是否存在。類的一個簡單應用,其作用是判斷所指定的文件是否存在。 import java. io. File; public class FileDemo1 public static void m

16、ainString args) File fl new File(“c:autoexec. bat) ; File f2 = new File(“c:biology.txt”); File f3 = new File(“c:command. com); File f4 new File(“c:windows.exff) ; System.out.println(文件文件+fl.getName()+(fl.exists() ? exists :not exist) ; System.out.println(文件文件+f2.getName()+(f2.exists() ? exists :not

17、exist) ; System.out.println(文件文件+f3.getName()+(f3.exists() ? exists :not exist) ; System.out.println(文件文件+f4.getName()+(f4. exists() ? exists :not exist”) ; 例例9-22:類似于在類似于在Windows 系統(tǒng)的系統(tǒng)的dos窗口輸窗口輸入入dir 命令,顯示當前目錄的內容。命令,顯示當前目錄的內容。 import java.io.File; public class FileDemo2 public static void main(Stri

18、ng args) File path = new File(“.”);/表示當前目錄表示當前目錄 String list = path.list(); /將當前目錄下的文件和子目錄的信息存放到數(shù)組中將當前目錄下的文件和子目錄的信息存放到數(shù)組中 for( int i = 0; i list. length; i + + ) System. out. println(listi); 教材: 例9-23 例9-24 例9-25 例9-26問題: 對File類的討論,沒有涉及文件內容的處理和操作,那么,如何對文件內容進行操作呢? 對文件內容的操作,就是對文件進行讀/寫(輸入/輸出)處理。 讀(寫)讀(

19、寫)按按3個步驟進行:個步驟進行:讀出或寫入)讀出或寫入)三、三、 文件的輸入與輸出(文件的讀寫)文件的輸入與輸出(文件的讀寫)-教材教材9.4節(jié)節(jié) 有關的輸入/輸出流(一一) 文件文件字符字符輸入輸入/輸出流輸出流: FileReader/FileWriter(二二)字符緩沖區(qū)輸入字符緩沖區(qū)輸入/輸出流輸出流(通道通道):為了提高效率為了提高效率 BufferedReader/ BufferedWriter(三三) 文件文件字節(jié)字節(jié)輸入輸入/輸出流輸出流: FileInputStream/FileOutputStream(四四)字節(jié)緩沖區(qū)輸入字節(jié)緩沖區(qū)輸入/輸出流輸出流(通道通道):為了提高

20、效率為了提高效率 BufferedInputStream/ BufferedOutputStream(五五) 基本數(shù)據(jù)類型的讀寫(基本數(shù)據(jù)類型的讀寫( 為了讀取各種數(shù)據(jù)類型)為了讀取各種數(shù)據(jù)類型) DataInputStream/DataOutputStream1 文件分類文件分類根據(jù)訪問文件的方式將文件分成根據(jù)訪問文件的方式將文件分成2類:類: (1)文本文件)文本文件(什么是文本文件什么是文本文件?) 輸入操作輸入操作; 輸出操作輸出操作;(2)二進制文件)二進制文件(什么是二進制文件什么是二進制文件?) 輸入操作輸入操作; 輸出操作輸出操作; 2 文本文件的讀寫(9.4.2節(jié))采用采用字

21、符流字符流對文本文件操作對文本文件操作n用用FileReader讀文本文件讀文本文件n用用FileWriter寫文本文件寫文本文件注意注意: 使用這兩個類進行讀寫時,可以讀寫單個字符,使用這兩個類進行讀寫時,可以讀寫單個字符,也可以讀寫一個字符串(當讀寫字符串時,需要用緩也可以讀寫一個字符串(當讀寫字符串時,需要用緩沖區(qū)流)沖區(qū)流)2.1 采用采用字符流字符流對文本文件對文本文件讀操作讀操作的基本思想與過程的基本思想與過程 (1)文件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸入輸入字符流字符流 (4)再形成再形成緩沖輸入流緩沖輸入流 (5)按按字符類型字符類型讀出數(shù)據(jù)并存放

22、到字符類型的變量中讀出數(shù)據(jù)并存放到字符類型的變量中 (6)對獲取數(shù)據(jù)的變量進行加工處理對獲取數(shù)據(jù)的變量進行加工處理 (7)關閉通道關閉通道(兩個流都關掉兩個流都關掉)讀過程讀過程1-引入相關的類引入相關的類使用該類是采用字符流讀取信息使用該類是采用字符流讀取信息 (所獲取的信息就是字符串所獲取的信息就是字符串).n引入相關的類 import java.io.File;import java.io.FileReader;import java.io.BufferedReader;import java.io.IOException;或:(用下面一個代替上面的4個) import java.io.

23、*讀過程讀過程2-創(chuàng)建通道(兩個通道)創(chuàng)建通道(兩個通道)構造一個構造一個BufferedReader對象對象 String s1=“mytest.txt”; File f=new File (s1);FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr);(1)文件文件 (2)形成文件對形成文件對象象 (3)形成文件形成文件輸輸入入字符流字符流(4)再形成再形成緩沖緩沖輸入流輸入流讀過程讀過程3-讀取文本文件的數(shù)據(jù)讀取文本文件的數(shù)據(jù) 利用利用BufferedReader的方法讀取的方法讀取文本文件文本

24、文件的數(shù)據(jù)的數(shù)據(jù): 常用讀取數(shù)據(jù)的方法常用讀取數(shù)據(jù)的方法: (1) String S= readLine(); /讀取一行數(shù)據(jù),返回字符串讀取一行數(shù)據(jù),返回字符串, 當當S=null 表示已經讀到尾表示已經讀到尾 (2) int x= read(char cbuf, int off, int len) / 將字符讀入數(shù)組的某一部分將字符讀入數(shù)組的某一部分,方法返回值是實際讀取的字符個數(shù)方法返回值是實際讀取的字符個數(shù),當返回值是當返回值是-1時時,表示已讀到尾(表示已讀到尾(藍部分的參數(shù)可以省略,表示讀滿數(shù)組藍部分的參數(shù)可以省略,表示讀滿數(shù)組) (3) int x=read() / 讀取單個字符

25、讀取單個字符,當返回值是當返回值是-1時時,表示已讀到尾表示已讀到尾方法的調用方法的調用: br.readLine(); BufferedReader 讀文本文件實例讀文本文件實例 /*創(chuàng)建一個創(chuàng)建一個FileReader對象對象.*/ FileReader fr=new FileReader(mytest.txt); /*創(chuàng)建一個創(chuàng)建一個BufferedReader 對象對象.*/ BufferedReader br=new BufferedReader(fr); /*讀取一行數(shù)據(jù)讀取一行數(shù)據(jù).*/ String line=br.readLine(); while(line!=null) S

26、ystem.out.println(line); line=br.readLine(); /*流的關閉流的關閉.*/ br.close(); fr.close(); 創(chuàng)建一個 FileReader 對象 創(chuàng)建一個 BufferedReader對象 演示:示例 f3功能功能: 讀取文件中信息讀取文件中信息,并顯并顯示在屏幕上示在屏幕上( 每次讀取文每次讀取文件中的一行件中的一行)應用舉例9_1: 將一個文本文件中信息輸出在屏幕上,在將一個文本文件中信息輸出在屏幕上,在輸出時,要將小寫字母輸出時,要將小寫字母,變換為大寫字母,再變換為大寫字母,再輸出。輸出。給出完整的設計過程及其說明給出完整的設計

27、過程及其說明:2.2 采用采用字符流字符流對文本文件對文本文件寫操作寫操作的基本思想與過程的基本思想與過程 (1)文件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸出輸出字符流字符流 (4)再形成緩沖再形成緩沖輸出輸出流流 (5)將將字符類型的變量字符類型的變量值寫入文件中值寫入文件中 (6)關閉通道關閉通道(兩個流都關掉兩個流都關掉)寫過程寫過程1-引入相關的類引入相關的類使用該類是采用字符流信息使用該類是采用字符流信息 (將字符將字符(串串)直接寫入文件中直接寫入文件中).n引入相關的類引入相關的類 import java.io.File;import java.io.Fi

28、leWriter ;import java.io. BufferedWriter ;import java.io.IOException;或或:(用下面一個代替上面的用下面一個代替上面的4個個) import java.io.*寫過程寫過程2-創(chuàng)建通道(兩個通道)創(chuàng)建通道(兩個通道) 構造一個構造一個BufferedWriter對象對象 String s1=“mytest.txt” File f=new File(s1) FileWriter fw=new FileWriter(f); BufferedWriter bw=new BufferedWriter(fw);(1)文件文件 (2)形成

29、文形成文件對象件對象 (3)形成文形成文件件輸出輸出字符流字符流 (4)再形成再形成緩沖輸出流緩沖輸出流寫過程寫過程3-寫文本文件的數(shù)據(jù)寫文本文件的數(shù)據(jù)n利用利用BufferedWriter的方法寫文本文件的方法寫文本文件:常用常用寫數(shù)據(jù)寫數(shù)據(jù)的方法的方法: void newLine() / 寫入一個行分隔符(寫入一個行分隔符(換行換行)。)。 void write(char cbuf, int off, int len) / 寫入字符數(shù)組的某一部分(寫入字符數(shù)組的某一部分(藍部分的參數(shù)可以省略,表示全部寫藍部分的參數(shù)可以省略,表示全部寫入入)。)。 void write(int c) / 寫

30、入單個字符寫入單個字符 void write(String s, int off, int len) / 寫入字符串的某一部分(寫入字符串的某一部分(藍部分的參數(shù)可以省略,表示全部寫入藍部分的參數(shù)可以省略,表示全部寫入)。)。 例如例如: bw.write (“hello”); 寫過程寫過程4-流對象的清空和關閉流對象的清空和關閉n相關流對象的清空和關閉bw.flush();fw.close();void close() / 關閉該流。void flush() / 刷新該流的緩沖。 用用BufferedWriter 寫文本文件寫文本文件 實例實例演示:示例 f4 /*創(chuàng)建一個創(chuàng)建一個FileW

31、riter 對象對象*/ FileWriter fw=new FileWriter(mytest.txt); /*創(chuàng)建一個創(chuàng)建一個BufferedWriter 對象對象*/ BufferedWriter bw=new BufferedWriter(fw); bw.write(大家好!大家好!); bw.write(我正在學習我正在學習BufferedWriter。); bw.newLine(); bw.write(請多多指教!請多多指教!); bw.newLine(); bw.write(email: studyjb-); bw.flush(); fw.close();應用舉例9_2 利用利用

32、“字符流字符流”實現(xiàn)對文本文件的復制,但在實現(xiàn)對文本文件的復制,但在復制時,需要將小寫字母,變換為大寫字母。即:復制時,需要將小寫字母,變換為大寫字母。即:形成的新文件中,不含有小寫字母。形成的新文件中,不含有小寫字母。給出完整的設計過程及其說明給出完整的設計過程及其說明:(1)分析,給出處理步驟;(2)代碼編寫;例9_2的處理過程分析:(1) (1) 給出兩個文件的描述給出兩個文件的描述; ;(2) (2) 建立文件輸入字符流建立文件輸入字符流( (要有緩沖區(qū)的要有緩沖區(qū)的););(3) (3) 建立文件輸出字符流建立文件輸出字符流( (要有緩沖區(qū)的要有緩沖區(qū)的););(4) (4) 讀文件

33、給一變量讀文件給一變量( (注意注意: :讀的方法選擇那個讀的方法選擇那個););(5) (5) 當文件不到尾時當文件不到尾時, ,重復執(zhí)行重復執(zhí)行: : (a) (a)判定字符是小寫字母嗎判定字符是小寫字母嗎? ?如果是如果是, ,則變換則變換; ; (b) (b)將字符寫入輸出流中將字符寫入輸出流中; ; (c) (c) 繼續(xù)從輸入流中讀信息繼續(xù)從輸入流中讀信息; ;(6) (6) 關閉通道。關閉通道。給出代碼的編寫過程。給出代碼的編寫過程。f9_2.java思考思考: (1)讀一個字讀一個字符如何實現(xiàn)符如何實現(xiàn); (2)讀一個字讀一個字符數(shù)組符數(shù)組,如何實現(xiàn)如何實現(xiàn)3 以字節(jié)流對文件的讀

34、寫操作有兩組不同的讀寫流:有兩組不同的讀寫流:n用用FileInputStream讀文件讀文件n用用FileOutputStream寫文寫文 (注意注意:該類也可以實現(xiàn)該類也可以實現(xiàn)文本文件文本文件的讀寫的讀寫,但稍微麻煩點,需要類型轉換但稍微麻煩點,需要類型轉換)n用用DataInputStream 讀二進制文件讀二進制文件n用用DataOutputStream 寫二進制文件寫二進制文件 (注意注意:上面上面4個類個類結合使用結合使用,可以實現(xiàn)各種可以實現(xiàn)各種數(shù)據(jù)類型數(shù)據(jù)類型的輸入的輸入/輸出輸出)采用字節(jié)流對文件操作采用字節(jié)流對文件操作只使用下面的類實現(xiàn)文件的讀寫只使用下面的類實現(xiàn)文件的讀

35、寫:n用用FileInputStream讀文件讀文件n用用FileOutputStream寫文件寫文件字節(jié)流字節(jié)流文件流:文件流:FileInputStream/ FileOutputStreamqFileInputStream類類: 用來打開一個輸入文件,若要打開的文件不存在,則用來打開一個輸入文件,若要打開的文件不存在,則會產生例外會產生例外FileNotFoundException,這是一個非運行時例,這是一個非運行時例外,必須捕獲或聲明拋棄外,必須捕獲或聲明拋棄;q FileOutputStream類類: 用來打開一個輸出文件,若要打開的文件不存在,則用來打開一個輸出文件,若要打開的文

36、件不存在,則會創(chuàng)建一個新的文件,否則原文件的內容會被新寫入的內會創(chuàng)建一個新的文件,否則原文件的內容會被新寫入的內容所覆蓋。容所覆蓋。q IOException類類: 在進行文件的讀在進行文件的讀/寫操作時,會產生非運行時例外寫操作時,會產生非運行時例外IOException,必須捕獲或聲明拋棄(其它的輸入,必須捕獲或聲明拋棄(其它的輸入/輸出流處輸出流處理時也同樣需要進行輸入理時也同樣需要進行輸入/輸出例外處理)。輸出例外處理)。 3.1 用用FileInputStream讀文件讀文件3.1 采用采用字節(jié)流字節(jié)流對文件對文件讀操作讀操作的基本思想與過程的基本思想與過程 (1)文件文件(Stri

37、ng) (2)形成文件對象形成文件對象(File) (3)形成輸入文件流形成輸入文件流(FileInputStream) (4)按按字節(jié)類型字節(jié)類型讀出數(shù)據(jù)讀出數(shù)據(jù),并存放到并存放到字節(jié)類型字節(jié)類型的變量中的變量中 (5)對獲取數(shù)據(jù)的變量進行加工處理對獲取數(shù)據(jù)的變量進行加工處理 (6)關閉通道關閉通道讀過程讀過程1-引入相關的類引入相關的類 使用該類是采用使用該類是采用字節(jié)流字節(jié)流讀取信息讀取信息 (所獲取的信息就是所獲取的信息就是字節(jié)類型字節(jié)類型).n引入相關的類 import java.io.File;import java.io. FileInputStream;import java.

38、io.IOException;或:(用下面一個代替上面的3個) import java.io.*讀過程讀過程2-創(chuàng)建通道(創(chuàng)建通道(1個通道)個通道) 由上面由上面,構造一個文件輸入流對象構造一個文件輸入流對象(字節(jié)流字節(jié)流) String s= “text”; File f=new File(s); FileInputStream fis = new FileInputStream( f ); (1)文件文件(String) (2)形成文件對象形成文件對象(File) (3)形成輸入文件流形成輸入文件流(FileInputStream)文件流的構造方法文件流的構造方法: FileInputS

39、tream(File f) 打開一個以打開一個以f描述的文件作為輸入。描述的文件作為輸入。 FileInputStream(String name) 打開一個文件路徑名為打開一個文件路徑名為name的文件作為輸入。的文件作為輸入。讀過程讀過程3-讀取文件的數(shù)據(jù)讀取文件的數(shù)據(jù) FileInputStream類讀取文件的數(shù)據(jù)的方法類讀取文件的數(shù)據(jù)的方法:(1) int read() / 從此輸入流中讀取一個從此輸入流中讀取一個數(shù)據(jù)字節(jié)數(shù)據(jù)字節(jié) (整型整型) (2) int read(byte b) / 從此輸入流中將從此輸入流中將最多最多 b.length 個字節(jié)的數(shù)據(jù)讀入一個個字節(jié)的數(shù)據(jù)讀入一個

40、字節(jié)數(shù)組字節(jié)數(shù)組中中 ,返回實際讀取字符的個數(shù)返回實際讀取字符的個數(shù)(3) int read(byte b, int off, int len) / 從此輸入流中將最多從此輸入流中將最多 len 個字節(jié)的數(shù)據(jù)讀入一個字節(jié)數(shù)組中個字節(jié)的數(shù)據(jù)讀入一個字節(jié)數(shù)組中,返回實際讀取字符的個數(shù)返回實際讀取字符的個數(shù) (注意注意: 對于三種讀方法,當返回值是對于三種讀方法,當返回值是-1時,表示讀到尾時,表示讀到尾)讀過程讀過程4-流對象關閉流對象關閉關閉文件輸入流對象關閉文件輸入流對象 fis.close();例9_3(讀文件,并顯示顯示(必須是字符型必須是字符型) public static void m

41、ain(String args) throws IOException int count; File f=new File(“abc.txt”); FileInputStream fs= new FileInputStream( f ); byte text = new byte200 ; count = fs.read(text); while(count!=-1) String s=new String(text,0,count); /實現(xiàn)了類型轉換實現(xiàn)了類型轉換,將字節(jié)數(shù)組將字節(jié)數(shù)組,轉換為字符串轉換為字符串 System.out.print(s); count = fs.read(t

42、ext); fs.close(); 需要使用將二進需要使用將二進制轉換為字符(串)制轉換為字符(串)的方法的方法問題問題:假如讀假如讀一個二一個二進制文進制文件,并件,并顯示在顯示在屏幕上,屏幕上,會出現(xiàn)會出現(xiàn)什么情什么情況?況? 給出給出一個例一個例子!子!演示:示例 f9_33.2 用用FileOutputStream 寫文件操作寫文件操作3.2 采用采用字節(jié)流字節(jié)流對文件對文件寫操作寫操作的基本思想與過程的基本思想與過程 (1)文件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸出輸出字節(jié)流字節(jié)流 (4)將將字節(jié)類型的變量字節(jié)類型的變量值寫入文件中值寫入文件中 (5)關閉通

43、道關閉通道寫過程寫過程1-引入相關的類引入相關的類用用FileOutputStream 寫文件寫文件n引入相關的類 import java.io.File; import java.io.FileOutputStream; import java.io.IOException;或:(用下面一個代替上面的3個) import java.io.*寫過程寫過程2-創(chuàng)建通道創(chuàng)建通道(1)文件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸出輸出字節(jié)流字節(jié)流文件流的構造方法文件流的構造方法nFileOutputStream( File f ) 創(chuàng)建一個以創(chuàng)建一個以f描述的文件作為輸出,文件

44、如果已經存在,描述的文件作為輸出,文件如果已經存在,則其內容被清空。則其內容被清空。nFileOutputStream(String name) 創(chuàng)建一個文件路徑名為創(chuàng)建一個文件路徑名為name的文件作為輸出,文件的文件作為輸出,文件如果已經存在,則其內容被清空。如果已經存在,則其內容被清空。nFileOutputStream(String name, boolean append) 創(chuàng)建一個文件路徑名為創(chuàng)建一個文件路徑名為name的文件作為輸出,文件的文件作為輸出,文件如果已經存在,則在該輸出上輸出的內容被接到原有內如果已經存在,則在該輸出上輸出的內容被接到原有內容之后。容之后。Output

45、Stream fos = new FileOutputStream(Text.txt“,true);寫過程寫過程3-寫文件的數(shù)據(jù)寫文件的數(shù)據(jù) 利用文件輸出流的方法寫字節(jié)類型利用文件輸出流的方法寫字節(jié)類型 (如果如果變量的類型變量的類型是字符類型是字符類型,需要轉換為字節(jié)型需要轉換為字節(jié)型,再寫入文再寫入文件中件中)常用的寫方法常用的寫方法:(1)void write(byte b) 將將 b.length 個字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流個字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流。(2)void write(byte b, int off, int len) 將指定字節(jié)數(shù)組中從偏移量將指定字節(jié)數(shù)組中

46、從偏移量 off 開始的開始的 len 個字節(jié)寫入此輸個字節(jié)寫入此輸出流。出流。(3) void write(int b) 將指定的字節(jié)寫入此輸出流將指定的字節(jié)寫入此輸出流 寫過程寫過程4-關閉通道關閉通道 關閉文件輸出流關閉文件輸出流: fos.close();應用應用FileOutputStream 寫文件寫文件 演示:示例 f2 public static void main(String args) throws IOException String str =好好學習好好學習Java; byte words = str.getBytes(); OutputStream fos = n

47、ew FileOutputStream(Text.txt); fos.write(words, 0, words.length); System.out.println(Text文件已更新文件已更新!); fos.close(); 使用 write( ) 方法將數(shù)據(jù)寫入文件類型變換類型變換按數(shù)據(jù)類型讀寫字節(jié)流按數(shù)據(jù)類型讀寫字節(jié)流4.1 DataOutputStream 寫文件寫文件 4.2 DataInputStream 讀文件讀文件 4.1 用用DataOutputStream 讀文件讀文件處理過程處理過程:(1)構造一個數(shù)據(jù)輸出流對象構造一個數(shù)據(jù)輸出流對象 FileOutputStream

48、 fos = new FileOutputStream(“Hell.class”); DataOutputStream dos = new DataOutputStream(fos);(2)利用數(shù)據(jù)輸出流類的方法將數(shù)據(jù)寫入文件利用數(shù)據(jù)輸出流類的方法將數(shù)據(jù)寫入文件 dis.writeInt(x); / 寫整數(shù)寫整數(shù)x dis.writeByte(y); / 寫寫B(tài)yte類型類型y (3)數(shù)據(jù)輸出流的關閉數(shù)據(jù)輸出流的關閉 dos.close (); fos.close(); /關閉數(shù)據(jù)輸入流關閉數(shù)據(jù)輸入流4.1 采用采用字節(jié)流字節(jié)流對文件對文件寫操作寫操作的基本思想與過程的基本思想與過程 (1)文

49、件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸出輸出字節(jié)流字節(jié)流 (4)再形成再形成數(shù)據(jù)輸出流數(shù)據(jù)輸出流 (5)按按變量的類型變量的類型,選擇相應的寫方法選擇相應的寫方法,將數(shù)據(jù)寫入文件中將數(shù)據(jù)寫入文件中 (7)關閉通道關閉通道(兩個流都關掉兩個流都關掉)寫過程寫過程1-引入相關的類引入相關的類使用該類是采用使用該類是采用數(shù)據(jù)類型數(shù)據(jù)類型(字節(jié)流字節(jié)流)寫信息寫信息n引入相關的類 import java.io.File;import java.io. FileOutputStream;import java.io. DataOutputStream;import java.i

50、o.IOException;或:(用下面一個代替上面的4個) import java.io.*寫過程寫過程2-創(chuàng)建通道(兩個通道)創(chuàng)建通道(兩個通道) 構造一個構造一個DataOutputStream對象對象 String s1=“mytest.txt”; File f=new File (s1); FileOutputStream fos=new FileOutputStream(f); DataOutputStream dos=new DataOutputStream(fos);(1)文件文件(2)形成文件對象形成文件對象(3)形成文件形成文件輸入輸入字節(jié)流字節(jié)流 (4)再形成再形成數(shù)據(jù)輸

51、入流數(shù)據(jù)輸入流寫過程寫過程3-寫文件寫文件 利用利用DataOutputStream的方法寫的方法寫文件文件: 常用寫數(shù)據(jù)的方法常用寫數(shù)據(jù)的方法: void flush() 清空此數(shù)據(jù)輸出流。清空此數(shù)據(jù)輸出流。 void write(byte b, int off, int len) 將指定字節(jié)數(shù)組中從偏移量將指定字節(jié)數(shù)組中從偏移量 off 開始的開始的 len 個字節(jié)寫入輸出流個字節(jié)寫入輸出流 void write(int b) 將指定字節(jié)(參數(shù)將指定字節(jié)(參數(shù) b 的八個低位)寫入輸出流。的八個低位)寫入輸出流。 Void writeBytes(String s ) 將字符串按字節(jié)順序寫出

52、到輸出流中。 Void writeChars(String s) 將字符串按字符順序寫入輸出流。將字符串按字符順序寫入輸出流。 void writeBoolean(v) ; void writeByte(v) ; void writeChar(v) ; void writeDouble(v) ; void writeFloat(v) ; void writeInt(v) ; void writeLong(v) ; void writeShort(v)寫過程寫過程4-關閉通道關閉通道(兩個通道兩個通道)數(shù)據(jù)輸出流的關閉數(shù)據(jù)輸出流的關閉 dos.close (); fos.close(); 例:f

53、9_4 將兩個學生的信息,采用Data數(shù)據(jù)流,寫入文件中. 學生的信息: “張三”, ”男”, 19, 98, 200.25 “李四”, ”女”, 18, 97, 210.15給出設計過程 f9_44.2 用用DataInputStream 讀文件讀文件處理過程處理過程:(1)構造一個數(shù)據(jù)輸入流對象構造一個數(shù)據(jù)輸入流對象 FileInputStream fis = new FileInputStream(“Hell.class”); DataInputStream dis = new DataInputStream(fis);(2)利用數(shù)據(jù)輸入流類的方法讀取二進制文件的數(shù)據(jù)利用數(shù)據(jù)輸入流類的方

54、法讀取二進制文件的數(shù)據(jù) dis.readInt(); / 讀取出來的是整數(shù)讀取出來的是整數(shù) dis.readByte(); / 讀取出來的數(shù)據(jù)是讀取出來的數(shù)據(jù)是Byte類型類型 (3)數(shù)據(jù)輸入流的關閉數(shù)據(jù)輸入流的關閉 dis.close (); /關閉數(shù)據(jù)輸入流關閉數(shù)據(jù)輸入流4.2 采用采用字節(jié)流字節(jié)流對文件對文件讀操作讀操作的基本思想與過程的基本思想與過程 (1)文件文件 (2)形成文件對象形成文件對象 (3)形成文件形成文件輸入輸入字節(jié)流字節(jié)流 (4)再形成再形成數(shù)據(jù)輸入流數(shù)據(jù)輸入流 (5)按按字節(jié)類型字節(jié)類型讀出數(shù)據(jù)并存放到讀出數(shù)據(jù)并存放到字節(jié)類型字節(jié)類型的變量中的變量中 (6)對獲取數(shù)

55、據(jù)的變量進行加工處理對獲取數(shù)據(jù)的變量進行加工處理 (7)關閉通道關閉通道(兩個流都關掉兩個流都關掉)讀過程讀過程1-引入相關的類引入相關的類使用該類是采用使用該類是采用字節(jié)流字節(jié)流讀取信息讀取信息 (所獲取的信息就是所獲取的信息就是字節(jié)類型字節(jié)類型)n引入相關的類 import java.io.File;import java.io. FileInputStream;import java.io. DataInputStream;import java.io.IOException;或:(用下面一個代替上面的4個) import java.io.*讀過程讀過程2-創(chuàng)建通道(兩個通道)創(chuàng)建通道(

56、兩個通道)構造一個構造一個DataInputStream對象對象 String s1=“mytest.txt”; File f=new File (s1);FileInputStream fs=new FileInputStream(f); DataInputStream dis=new DataInputStream(fs);(1)文件文件 (2)形成文形成文件對象件對象 (3)形成文形成文件件輸入輸入字節(jié)流字節(jié)流 (4)再形成再形成數(shù)據(jù)輸入流數(shù)據(jù)輸入流讀過程讀過程3-讀取文件的數(shù)據(jù)讀取文件的數(shù)據(jù) 利用利用DataInputStream的方法讀取的方法讀取文件文件的數(shù)據(jù)的數(shù)據(jù): 常用讀取數(shù)據(jù)

57、的方法常用讀取數(shù)據(jù)的方法: int read(byte b) 從所包含的輸入流中讀取一定數(shù)量的字節(jié),并將它們存儲到緩沖區(qū)數(shù)組從所包含的輸入流中讀取一定數(shù)量的字節(jié),并將它們存儲到緩沖區(qū)數(shù)組 b 中中 int read(byte b, int off, int len) 從所包含的輸入流中將從所包含的輸入流中將 len 個字節(jié)讀入一個字節(jié)數(shù)組中個字節(jié)讀入一個字節(jié)數(shù)組中 boolean readBoolean() ; byte readByte() ; char readChar() ; double readDouble() ; float readFloat() ; int readInt()

58、; long readLong() ; short readShort()注意注意: 所讀取所讀取數(shù)據(jù)數(shù)據(jù)的方法的方法,所讀取所讀取的數(shù)據(jù)的數(shù)據(jù),必須是必須是由由Data數(shù)據(jù)流數(shù)據(jù)流寫入寫入文件中的文件中的.給出設計過程 f9_5(讀取f9_4程序生成的文件,并顯示)應用應用DataOutputStream 讀寫文件讀寫文件 FileInputStream fis = new FileInputStream(RFile.class);DataInputStream dis = new DataInputStream(fis);FileOutputStream outFile = new Fil

59、eOutputStream(temp.class);DataOutputStream out = new DataOutputStream(outFile);int temp;while ( (temp = dis.read() != -1) out.write(temp); fis.close();out.close();演示:示例f55 鍵盤輸入數(shù)據(jù) 鍵盤輸入信息鍵盤輸入信息,由字節(jié)型開始由字節(jié)型開始,最后獲得的是字符流最后獲得的是字符流(字符串字符串).其處理過程是其處理過程是: (1)鍵盤設備是字節(jié)流文件鍵盤設備是字節(jié)流文件(標準輸入對象標準輸入對象:System.in); (2)需要

60、一個由字節(jié)流轉換為字符流的一種流需要一個由字節(jié)流轉換為字符流的一種流(橋橋); (3) 為了提高處理效率為了提高處理效率,需要字符型緩沖流需要字符型緩沖流, (4)形成字符流形成字符流(字符串字符串); (5)由字符串由字符串,利用類型轉換利用類型轉換,提供給相應類型的變量提供給相應類型的變量.注意注意:每一步需要什么類每一步需要什么類,需要什么方法需要什么方法?第一步:導入包類需要的類: InputStream (對于鍵盤是一個標準輸入字節(jié)流對象標準輸入字節(jié)流對象:System.in) InputStreamReader BufferedReader第二步:建立通道: InputStream

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論