




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2022-3-712本章總體綱要本章總體綱要 文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介 輸入流與輸出流輸入流與輸出流 隨機訪問文件隨機訪問文件 讀寫器讀寫器 文件文件3 文件文件 可以用來長期保存大量的數(shù)據(jù)可以用來長期保存大量的數(shù)據(jù) 在程序結(jié)束后仍能長期在程序結(jié)束后仍能長期(永久永久)存在存在 文件一般位于副存儲設(shè)備上文件一般位于副存儲設(shè)備上 硬盤硬盤 光盤光盤 磁帶磁帶 保存在變量或數(shù)組中的數(shù)據(jù)是臨時性數(shù)據(jù)保存在變量或數(shù)組中的數(shù)據(jù)是臨時性數(shù)據(jù) 當程序結(jié)束時一般就會丟失當程序結(jié)束時一般就會丟失文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介4文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介 Java語言將語言將文件文件 看作字節(jié)或字
2、符序列的集合??醋髯止?jié)或字符序列的集合。 Java語言提供了豐富的處理文件等的類這些類主要位于語言提供了豐富的處理文件等的類這些類主要位于包包 java.io 中中 包包 java.io 兩個主要數(shù)據(jù)類兩個主要數(shù)據(jù)類 輸入輸入: java.io.InputStream 輸出輸出: java.io.OutputStream 兩個主要的讀寫器類兩個主要的讀寫器類: 讀入讀入: java.io.Reader 寫出寫出: java.io.Writer5 數(shù)據(jù)流數(shù)據(jù)流是一系列的數(shù)據(jù)是一系列的數(shù)據(jù) 例如例如: System.in、System.out或或 System.err 所處理的對象是數(shù)據(jù)流所處理的
3、對象是數(shù)據(jù)流 System.in - 標準輸入標準輸入 (從鍵盤從鍵盤) System.out 標準輸出標準輸出 (到屏幕到屏幕) System.err 標準錯誤輸出標準錯誤輸出 (到屏幕到屏幕) 可以重新定向可以重新定向 (例如例如: 將從鍵盤改為從數(shù)據(jù)將從鍵盤改為從數(shù)據(jù)文件文件)文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介6 處理數(shù)據(jù)流的核心思想處理數(shù)據(jù)流的核心思想 通過循環(huán)處理每個數(shù)據(jù)單元,直到遇到結(jié)束符或出通過循環(huán)處理每個數(shù)據(jù)單元,直到遇到結(jié)束符或出現(xiàn)例外現(xiàn)例外(Exception) 結(jié)束符結(jié)束符 在在Unix操作系統(tǒng)下操作系統(tǒng)下, 鍵入鍵入Ctrl-D表示數(shù)據(jù)流的結(jié)表示數(shù)據(jù)流的結(jié)束束 在在Win
4、dows操作系統(tǒng)下操作系統(tǒng)下, 鍵入鍵入Ctrl-Z表示數(shù)據(jù)流的表示數(shù)據(jù)流的結(jié)束結(jié)束文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介7 Java所有的所有的I/O機制都是基于數(shù)據(jù)流的,這些數(shù)據(jù)流表示了機制都是基于數(shù)據(jù)流的,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動序列。字符或者字節(jié)數(shù)據(jù)的流動序列。 Java的的I/O流提供了讀寫數(shù)據(jù)的標準方法。流提供了讀寫數(shù)據(jù)的標準方法。 Java.io是大多數(shù)面向數(shù)據(jù)流的輸入是大多數(shù)面向數(shù)據(jù)流的輸入/輸出類的主要軟件包。輸出類的主要軟件包。 Java.io InputStream OutputStream 所有其它面象數(shù)據(jù)流的輸入所有其它面象數(shù)據(jù)流的輸入/輸出類都要擴展這兩個基
5、類輸出類都要擴展這兩個基類文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介8關(guān)于數(shù)據(jù)流的類關(guān)于數(shù)據(jù)流的類 BufferedInputStream BufferedOutputStream DataInputStream DataOutputStream FileInputStream FileOutputStream 9本章總體綱要本章總體綱要 文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介 輸入流與輸出流輸入流與輸出流 Reader 和和 Writer 類類 File10輸入流與輸出流輸入流與輸出流 輸入流輸入流 將數(shù)據(jù)從文件、標準輸入或其他外部將數(shù)據(jù)從文件、標準輸入或其他外部設(shè)備輸入加載到內(nèi)存設(shè)備輸入加載到內(nèi)存 輸出流
6、輸出流 將內(nèi)存中的數(shù)據(jù)保存到文件中,或傳將內(nèi)存中的數(shù)據(jù)保存到文件中,或傳輸給輸出設(shè)備輸給輸出設(shè)備11InputStream類類類類java.io.InputStream 是一個抽象是一個抽象(abstract)類,聲明了類,聲明了從原始字節(jié)數(shù)據(jù)流讀入數(shù)據(jù)的基本方法從原始字節(jié)數(shù)據(jù)流讀入數(shù)據(jù)的基本方法類中聲明的方法類中聲明的方法:public abstract int read() throws IOException public int read(byte data) throws IOException public int read(byte data, int offset, int l
7、ength) throws IOException public long skip(long n) throws IOException public int available() throws IOException public void close() throws IOException public void reset() throws IOException 12read( )方法方法 public abstract int read() throws IOException 從當前輸入流中讀取數(shù)據(jù)的下一個字節(jié)。從當前輸入流中讀取數(shù)據(jù)的下一個字節(jié)。 返回的字節(jié)值返回的字節(jié)值是
8、在是在 0 到到 255 范圍內(nèi)的一個范圍內(nèi)的一個 int 數(shù)。如果已讀到流的數(shù)。如果已讀到流的末尾,沒有再可讀的字節(jié)時,則返回末尾,沒有再可讀的字節(jié)時,則返回 -1。 該方法將一該方法將一直阻塞,直到有輸入數(shù)據(jù)、檢測到了數(shù)據(jù)流尾或拋出異直阻塞,直到有輸入數(shù)據(jù)、檢測到了數(shù)據(jù)流尾或拋出異常。常。 子類必須提供當前方法的一個實現(xiàn)。子類必須提供當前方法的一個實現(xiàn)。 返回值:數(shù)據(jù)的下一個字節(jié);如果已讀到流尾,則為返回值:數(shù)據(jù)的下一個字節(jié);如果已讀到流尾,則為 -1。 拋出拋出 IOException :如果發(fā)生某個:如果發(fā)生某個 I/O 錯誤。錯誤。 書書P201 例題例題13available( )
9、方法方法 給出可以讀入的字節(jié)數(shù)給出可以讀入的字節(jié)數(shù) 這樣在讀數(shù)據(jù)之前就知道可以讀入的字節(jié)數(shù)這樣在讀數(shù)據(jù)之前就知道可以讀入的字節(jié)數(shù) java.io.InputStreampublic int available() throws IOException14close()方法方法 public void close() throws IOException 關(guān)閉當前輸入流,并釋放與它相關(guān)的任一系統(tǒng)資關(guān)閉當前輸入流,并釋放與它相關(guān)的任一系統(tǒng)資源。源。 InputStream 的的 close 方法不做任何事。方法不做任何事。 拋出:拋出: IOException 如果發(fā)生某個如果發(fā)生某個 I/O 錯
10、誤。錯誤。 15FileInputStream類類 FileInputStream是從是從InputStream中繼承下來的,用于從中繼承下來的,用于從指定的文件中提取。指定的文件中提取。 FileInputStream中特殊的方法:中特殊的方法:getFD(),該方法用于獲,該方法用于獲取文件句柄(實際上是文件描述類的實例),使用方法如下:取文件句柄(實際上是文件描述類的實例),使用方法如下:FileInputStream aFIS = new FileInputStream(aFileName);FileDescriptor myFD = aFIS.getFD(); 如要重新打開該文件:如
11、要重新打開該文件: FileInputStream aFIS = new FileInputStream(myFD) 例題例題:P20316OutputStream類類 與與 InputStream相似,相似,OutputStream 也是也是abstract 類類 類中的成員方法類中的成員方法:public abstract void write(int b) throws IOException public void write(byte data) throws IOException public void write(byte data, int offset, int lengt
12、h) throws IOException public void flush( ) throws IOExceptionpublic void close( ) throws IOException 書書P204 例題例題17Write()方法()方法 write方法與方法與InputStream的的read方法相對應(yīng),它有方法相對應(yīng),它有三個形態(tài):三個形態(tài):(1) write(byte):將指定:將指定byte數(shù)組中的數(shù)據(jù)輸出到數(shù)組中的數(shù)據(jù)輸出到指定指定Stream;(2) write(byte,int,int):將指定:將指定byte數(shù)組中的數(shù)據(jù)數(shù)組中的數(shù)據(jù)從第二個參數(shù)開始,輸出第三個參
13、數(shù)指定的長度到指定從第二個參數(shù)開始,輸出第三個參數(shù)指定的長度到指定的的Stream;(3) wirte(int);將一個;將一個int值輸出到指定的值輸出到指定的Stream;18flush和close 有些輸出流在輸出時先放在緩沖中,可以使用有些輸出流在輸出時先放在緩沖中,可以使用flush將這些數(shù)據(jù)真正寫入指定的輸出流中將這些數(shù)據(jù)真正寫入指定的輸出流中public void flush( ) throws IOException Close用于關(guān)閉指定的輸出流。用于關(guān)閉指定的輸出流。 public void close( ) throws IOException19FileOutputSt
14、ream FileOutputStream是是OutputStream的一個子類的一個子類 FileOutputStream有有5個構(gòu)造方法,最常用的方法個構(gòu)造方法,最常用的方法 public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(String name,boolean append) throws FileNotFoundException 說明說明 name:指定數(shù)據(jù)要寫入的文件名:指定數(shù)據(jù)要寫入的文件名 append:為真,則將數(shù)據(jù)添加到文件已有內(nèi)容的末為真,則
15、將數(shù)據(jù)添加到文件已有內(nèi)容的末尾;為假,刪除已有的內(nèi)容,再寫入新的內(nèi)容。尾;為假,刪除已有的內(nèi)容,再寫入新的內(nèi)容。20輸輸 出出 步步 驟驟 建立輸出流:建立對應(yīng)的輸出流對象,也就是完成由流對象到外部數(shù)據(jù)源之間的轉(zhuǎn)換。 向流中寫入數(shù)據(jù):將需要輸出的數(shù)據(jù),調(diào)用對應(yīng)的write方法寫入到流對象中。 關(guān)閉輸出流:在寫入完畢以后,調(diào)用流對象的close方法關(guān)閉輸出流,釋放資源。 書20621習(xí)習(xí) 題題 應(yīng)用應(yīng)用FileInputStream類,編寫應(yīng)用程序,類,編寫應(yīng)用程序,從磁盤上讀取一個從磁盤上讀取一個Java程序,并將源程序代碼程序,并將源程序代碼顯示在屏幕上。(被讀取的文件路徑為:顯示在屏幕上。
16、(被讀取的文件路徑為:D:/workspace/ch3/test.java)22PrintStream 類類 java.io.PrintStream 是類是類FilterOutputStream的的子類子類 實例實例: System.out 和和 System.err 類類PrintStream 的優(yōu)點的優(yōu)點 可以輸出各種各樣的數(shù)據(jù)可以輸出各種各樣的數(shù)據(jù) 一般不會拋出例外一般不會拋出例外(IOException) 具有自動強制輸出(具有自動強制輸出(flush)功能)功能 書書P21023數(shù)據(jù)的輸入流和輸出流數(shù)據(jù)的輸入流和輸出流 類類 java.io.DataInputStream 和類和類
17、java.io.DataOutputStream 提供讀取和寫出基本數(shù)提供讀取和寫出基本數(shù)據(jù)類型的數(shù)據(jù)據(jù)類型的數(shù)據(jù) 讀寫方式具有機器讀寫方式具有機器(平臺平臺)無關(guān)性無關(guān)性 通常運用類通常運用類 DataInputStream 讀取運用類讀取運用類 DataOutputStream寫出的數(shù)據(jù)寫出的數(shù)據(jù) 書書21324習(xí)習(xí) 題題 編寫一個編寫一個Java程序?qū)敵绦驅(qū)?00, 101, 102, 103, 104,105個數(shù)以數(shù)組的形式寫入到個數(shù)以數(shù)組的形式寫入到Dest.txt文件中,并文件中,并以相反的順序讀出顯示在屏幕上。以相反的順序讀出顯示在屏幕上。25帶緩存的輸入流和輸出流帶緩存的輸
18、入流和輸出流 BufferedInputStream和和BufferedOutputStream 為為InputStream、OutputStream類的對象類的對象增加緩沖區(qū)功能增加緩沖區(qū)功能 提高輸入提高輸入/輸出輸出(I/O)性能的一種方法性能的一種方法26帶緩存的輸入流和輸出流帶緩存的輸入流和輸出流27 構(gòu)造方法構(gòu)造方法:public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in, int size) public BufferedOutputStream(OutputStre
19、am out) public BufferedOutputStream(OutputStream out, int size) 最佳緩存大小高度依賴于機器平臺以及輸入最佳緩存大小高度依賴于機器平臺以及輸入/輸出的數(shù)據(jù)輸出的數(shù)據(jù)大小大小 例例P215帶緩存的輸入流和輸出流帶緩存的輸入流和輸出流28標準輸入輸出數(shù)據(jù)流標準輸入輸出數(shù)據(jù)流標準輸入輸出數(shù)據(jù)流標準輸入輸出數(shù)據(jù)流 (表表7.2,P217)static PrintStream err 標準錯誤輸出流標準錯誤輸出流static InputStream in 標準輸入流標準輸入流static PrintStream out 標準輸出流標準輸出流
20、可以通過類名直接訪問可以通過類名直接訪問System.inSystem.out1) System.err29標準輸入輸出數(shù)據(jù)流標準輸入輸出數(shù)據(jù)流重定向重定向public static void setIn(InputStream in) 將標準輸入流重定向為參數(shù)in指定的輸入流public static void setOut(PrintStream out) 將標準輸出流重定向為參數(shù)out指定的輸出流30隨機訪問文件隨機訪問文件 前面介紹的對文件操作的類一般是前面介紹的對文件操作的類一般是順序地讀取或存儲數(shù)據(jù)順序地讀取或存儲數(shù)據(jù),而且讀取和存儲是使用而且讀取和存儲是使用不同的類不同的類 隨機
21、訪問文件方式可以在隨機訪問文件方式可以在指定位置指定位置讀讀/寫字節(jié)內(nèi)容寫字節(jié)內(nèi)容 RandomAccessFile 實例對象實例對象 構(gòu)造方法構(gòu)造方法public RandomAccessFile(String name,String mode ) throws FileNotFoundException 注意點注意點 必須指定文件名必須指定文件名 必須指定文件的訪問模式(必須指定文件的訪問模式(r或者或者rw)31運用運用 RandomAccessFileRandomAccessFile常用方法常用方法 skipBytes(long i):從前往后撥弄指示器的位置,就是從前往后撥弄指示器的
22、位置,就是跳過多少個跳過多少個字節(jié)字節(jié)讀取數(shù)據(jù)。讀取數(shù)據(jù)。 Void seek(long p): 對指示器作決定性的定位,用于從后往前撥弄指示對指示器作決定性的定位,用于從后往前撥弄指示器的位置。器的位置。 對于對于seek方法,擁有方法,擁有skipBytes( )的功能,但的功能,但seek( )在使用過程非常影響系統(tǒng)的開銷。只有萬在使用過程非常影響系統(tǒng)的開銷。只有萬不得已的情況下使用。不得已的情況下使用。 例:例:seek(0) 指示器移到首部指示器移到首部 例:例:P22132本章總體綱要本章總體綱要 文件與數(shù)據(jù)流簡介文件與數(shù)據(jù)流簡介 輸入流與輸出流輸入流與輸出流 讀寫器讀寫器 文件文
23、件33讀寫器讀寫器 (Reader和和Writer) 前面講的輸入前面講的輸入/輸出流針對的是字節(jié)流輸出流針對的是字節(jié)流 處理文本數(shù)據(jù)可以采用類處理文本數(shù)據(jù)可以采用類java.io.Reader 和和 java.io.Writer 類類java.io.Reader 和和java.io.Writer 是抽象是抽象(abstract )類類是基于文本的其它讀寫器的父類是基于文本的其它讀寫器的父類(superclasses) 輸入輸入/輸出流輸出流字節(jié)流字節(jié)流 讀寫器讀寫器字符流字符流 輸入輸出流類與讀寫器類之間的對應(yīng)關(guān)系(輸入輸出流類與讀寫器類之間的對應(yīng)關(guān)系(P223,表,表7.3)34類類Rea
24、der的方法的方法Read() public int read() throws IOException 讀取單個字符 當返回值為-1時,表示到達文件的末尾。35類類Writer的方法的方法write() public void write(int c) throws IOException 輸出單個字符輸出單個字符 其它其它write方法方法 public void write(char text) throws IOException public abstract void write(char text, int offset, int length) throws IOExcepti
25、on public void write(String s) throws IOException public void write(String s, int offset, int length) throws IOException36類類Writer的方法的方法 flush( ) public abstract void flush ( ) throws IOException Close( ) public abstract void close ( ) throws IOException37FileReader 類類 FileReader:讀取文件內(nèi)容讀取文件內(nèi)容java.la
26、ng.Object | +-java.io.Reader | +-java.io.InputStreamReader | +-java.io.FileReader 實例實例: FileReader fr = new FileReader(test); 38FileWriter 類類 FileWriter:寫文本文件寫文本文件java.lang.Object | +-java.io.Writer | +-java.io.OutputStreamWriter | +-java.io.FileWriter 實例實例: FileWriter fw = new FileWriter(“test); 例子
27、:例子:P22539類類BufferedReader 類類 java.io.BufferedReader 是類是類java.io.Reader的子類的子類java.lang.Object | +-java.io.Reader | +-java.io.BufferedReader 當讀取數(shù)據(jù)量很大時,一個很好的方法是當讀取數(shù)據(jù)量很大時,一個很好的方法是: 通過類通過類BufferedReader,這時需要給,這時需要給Reader的子類的子類(如如: FileReader)“外包外包”上類上類BufferedReader 實例實例: BufferedReader br = new Buffere
28、dReader(new FileReader(test);40類類LineNumberReader 類類 java.io.LineNumberReader是類是類java.io.BufferedReader的子類:帶有行號信息的子類:帶有行號信息java.lang.Object | +-java.io.Reader | +-java.io.BufferedReader | +-java.io.LineNumberReader 類類LineNumberReader中的部分方法中的部分方法public LineNumberReader(Reader in)public LineNumberRead
29、er(Reader in, int size)public void setLineNumber(int lineNumber)public int getLineNumber()41類類BufferedWriterBufferedWriter和和FileWriter兩個類都是兩個類都是Writer抽象類下的子類。抽象類下的子類。它們可以以字符流的方式并使用緩沖區(qū)把數(shù)據(jù)寫入文本文件,這也提它們可以以字符流的方式并使用緩沖區(qū)把數(shù)據(jù)寫入文本文件,這也提高了寫文本文件和效率。高了寫文本文件和效率。 構(gòu)造一個構(gòu)造一個BufferedWriter對象對象 FileWriter fw=new FileWr
30、iter(mytest.txt); BufferedWriter bw=new BufferedWriter(fw); 利用利用BufferedWriter的方法寫文本文件的方法寫文本文件bw.write (“hello”); 相關(guān)流對象的清空和關(guān)閉相關(guān)流對象的清空和關(guān)閉bw.flush();fw.close(); 例題:例題:P22742PrintWriter 類類 PrintWriter 是類是類 Writer的子類的子類java.lang.Object| +-java.io.Writer | +-java.io.PrintWriter 類類 PrintWriter 用于處理文本數(shù)據(jù)而不是
31、字節(jié)數(shù)據(jù)用于處理文本數(shù)據(jù)而不是字節(jié)數(shù)據(jù) 方法:方法:P229-230 例子:例子:P23143類類 InputStreamReader 從控制臺窗口讀入數(shù)據(jù)的常用方法從控制臺窗口讀入數(shù)據(jù)的常用方法 類類 java.io.InputStreamReader 起到了從輸入流到起到了從輸入流到Reader的橋梁作用的橋梁作用 實例實例: InputStreamReader isr = new inputStreamReader(System.in);44類類 OutputStreamWriter 類類 java.io.OutputStreamWriter起到了從輸出流到起到了從輸出流到Writer的橋梁作用的橋梁作用 實例實例:OutputStreamWriter osw = ne
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校規(guī)定資產(chǎn)管理制度
- 城鄉(xiāng)建設(shè)公司管理制度
- 醫(yī)藥公司藥妝管理制度
- DB62T 4330-2021 油菜品種 隴油16號
- DB62T 4415-2021 當歸栽培技術(shù)規(guī)程
- 聚會席位安排方案(3篇)
- 小區(qū)樓梯休整方案(3篇)
- 廠區(qū)供熱規(guī)劃方案(3篇)
- 城郊小院改造方案(3篇)
- 冷鏈試劑交貨方案(3篇)
- 《蛇傷急救與防治》
- 關(guān)于電壓互感器的鐵磁諧振及其消諧措施講義
- The Last of Us《最后生還者(2023)》第一季第八集完整中英文對照劇本
- (2.3)-采煤機進刀方式
- GB/T 9164-2001關(guān)節(jié)軸承角接觸關(guān)節(jié)軸承
- 初中英語學(xué)科教學(xué)的項目化教學(xué)課件
- 化學(xué)制藥工藝學(xué)試題庫
- 國開電大應(yīng)用寫作形考任務(wù)6答案
- 傳染病院內(nèi)感染預(yù)防與控制共26張課件
- 說專業(yè)(市場營銷專業(yè))課件
- 詞匯及翻譯四級漢譯英練習(xí)
評論
0/150
提交評論