第6章輸入輸出_第1頁
第6章輸入輸出_第2頁
第6章輸入輸出_第3頁
第6章輸入輸出_第4頁
第6章輸入輸出_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java語言程序設計(第2版)第 6 章 輸入/輸出流和文件2目錄 6.1 輸入/輸出流 6.2 文件讀寫 6.3 本章小結36.1 輸入/輸出流 通常程序需要從外部獲取/輸出信息 這個“外部”范圍很廣,包括諸如鍵盤、顯示器、文件、磁盤、網(wǎng)絡、另外一個程序等 “信息”也可以是任何類型的,例如一個對象、串字符、圖像、聲音等 通過使用java.io包中的輸入/輸出流類就可以達到輸入輸出信息的目的46.1.1 I/O流的概念 I/O流(Input/Output) 在Java中將信息的輸入與輸出過程抽象為I/O流 輸入是指數(shù)據(jù)流入程序 輸出是指數(shù)據(jù)從程序流出 一個流就是一個從源流向目的地的數(shù)據(jù)序列 I

2、O流類一旦被創(chuàng)建就會自動打開 通過調用close方法,可以顯式關閉任何一個流,如果流對象不再被引用,Java的垃圾回收機制也會隱式地關閉它6.1 輸入/輸出流5 輸入流 為了從信息源獲取信息,程序打開一個輸入流,程序可從輸入流讀取信息 輸出流 當程序需要向目標位置寫信息時,便需要打開一個輸出流,程序通過輸出流向這個目標位置寫信息6.1.1 I/O流的概念(續(xù)) 6.1 輸入/輸出流6對象對象源源? 目標目標? 或兩者或兩者?disk file running program monitor keyboard Internet connection image scanner mouse Bot

3、hBothDestinationSourceBothSourceSource6.1.1 I/O流的概念(續(xù))源和目標的類型6.1 輸入/輸出流7 不論數(shù)據(jù)從哪來,到哪去,也不論數(shù)據(jù)本身是何類型,讀寫數(shù)據(jù)的方法大體上都是一樣的:6.1.1 I/O流的概念(續(xù))讀寫數(shù)據(jù)的方法讀寫打開一個流讀信息關閉流打開一個流寫信息關閉流6.1 輸入/輸出流86.1.2 預定義的I/O流類概述 輸入/輸出流可以從以下幾個方面進行分類 從流的方向劃分 輸入流 輸出流 從流的分工劃分 節(jié)點流 處理流 從流的內(nèi)容劃分 面向字符的流 面向字節(jié)的流6.1 輸入/輸出流9 面向字符的流:專門用于字符數(shù)據(jù) 面向字節(jié)的流:用于一

4、般目的6.1.2 預定義的I/O流類概述(續(xù))java.io包的頂級層次結構6.1 輸入/輸出流106.1.2 預定義的I/O流類概述(續(xù))面向字符的流 面向字符的流 針對字符數(shù)據(jù)的特點進行過優(yōu)化,提供一些面向字符的有用特性 源或目標通常是文本文件6.1 輸入/輸出流11 實現(xiàn)內(nèi)部格式和文本文件中的外部格式之間轉換 內(nèi)部格式:16-bit char 數(shù)據(jù)類型 外部格式: UTF(Universal character set Transformation Format):很多人稱之為Universal Text Format 包括ASCII 碼及非ASCII 碼字符,比如: 斯拉夫(Cyril

5、lic)字符, 希臘字符,亞洲字符等6.1.2 預定義的I/O流類概述(續(xù))面向字符的流6.1 輸入/輸出流12 面向字符的抽象類Reader和Writer java.io包中所有字符流的抽象基類 Reader提供了輸入字符的API Writer提供了輸出字符的API 它們的子類又可分為兩大類 節(jié)點流:從數(shù)據(jù)源讀入數(shù)據(jù)或往目的地寫出數(shù)據(jù) 處理流:對數(shù)據(jù)執(zhí)行某種處理 多數(shù)程序使用這兩個抽象類的一系列子類來讀入/寫出文本信息 例如FileReader/FileWriter用來讀/寫文本文件6.1.2 預定義的I/O流類概述(續(xù))面向字符的流6.1 輸入/輸出流136.1.2 預定義的I/O流類概述

6、(續(xù))面向字符的流陰影部分為節(jié)點流6.1 輸入/輸出流14 數(shù)據(jù)源或目標中含有非字符數(shù)據(jù),必須用字節(jié)流來輸入/輸出 通常被用來讀寫諸如圖片、聲音之類的二進制數(shù)據(jù) 絕大多數(shù)數(shù)據(jù)是被存儲為二進制文件的,世界上的文本文件大約只能占到2,通常二進制文件要比含有相同數(shù)據(jù)量的文本文件小得多6.1.2 預定義的I/O流類概述(續(xù))面向字節(jié)的流6.1 輸入/輸出流15 InputStream和OutputStream 是用來處理8位字節(jié)流的抽象基類,程序使用這兩個類的子類來讀寫8位的字節(jié)信息 分為兩部分 節(jié)點流 處理流6.1.2 預定義的I/O流類概述(續(xù))面向字節(jié)的流6.1 輸入/輸出流166.1.2 預定

7、義的I/O流類概述(續(xù))面向字節(jié)的流陰影部分為節(jié)點流6.1 輸入/輸出流17 標準輸入輸出流對象 System類的靜態(tài)成員變量 包括 System.in: InputStream類型的,代表標準輸入流,這個流是已經(jīng)打開了的,默認狀態(tài)對應于鍵盤輸入。 System.out:PrintStream類型的,代表標準輸出流,默認狀態(tài)對應于屏幕輸出 System.err:PrintStream類型的,代表標準錯誤信息輸出流,默認狀態(tài)對應于屏幕輸出6.1.2 預定義的I/O流類概述(續(xù))標準輸入輸出6.1 輸入/輸出流186.1.2 預定義的I/O流類概述(續(xù))標準輸入輸出 標準I/O重新導向 setIn

8、(InputStream): 設置標準輸入流 setOut(PrintStream):設置標準輸出流 setErr(PrintStream):設置標準錯誤輸出流6.1 輸入/輸出流19 從鍵盤讀入信息并在顯示器上顯示import java.io.*;public class Echo public static void main(String args) throws IOException BufferedReader in = new BufferedReader( new InputStreamReader(System.in); String s; while(s = in.read

9、Line().length() != 0) System.out.println(s); 6.1.2 預定義的I/O流類概述(續(xù))例6-1運行結果運行結果Hello!Hello!6.1 輸入/輸出流20 System.in 程序啟動時由Java系統(tǒng)自動創(chuàng)建的流對象,它是原始的字節(jié)流,不能直接從中讀取字符,需要對其進行進一步的處理 InputStreamReader(System.in) 以System.in為參數(shù)創(chuàng)建一個InputStreamReader流對象,相當于字節(jié)流和字符流之間的一座橋梁,讀取字節(jié)并將其轉換為字符 BufferedReader in 對InputStreamReader

10、處理后的信息進行緩沖,以提高效率6.1.2 預定義的I/O流類概述(續(xù))例6-1說明6.1 輸入/輸出流21 處理流 不直接與數(shù)據(jù)源或目標相連,而是基于另一個流來構造 從流讀寫數(shù)據(jù)的同時對數(shù)據(jù)進行處理 例6-1中的InputStreamReader和BufferedReader都屬于處理流 InputStreamReader讀取字節(jié)并轉換為字符 BufferedReader對另一個流產(chǎn)生的數(shù)據(jù)進行緩沖6.1.2 預定義的I/O流類概述(續(xù))處理流6.1 輸入/輸出流22用一行表達式實現(xiàn):BufferedReader stdin = new BufferedReader ( new InputS

11、treamReader(System.in) ); 6.1.2 預定義的I/O流類概述(續(xù))處理流6.1 輸入/輸出流23 IO異常 多數(shù)IO方法在遇到錯誤時會拋出異常,因此調用這些方法時必須 在方法頭聲明拋出IOException異常 或者在try塊中執(zhí)行IO,然后捕獲IOException6.1.2 預定義的I/O流類概述(續(xù))I/O異常6.1 輸入/輸出流246.2 文件讀寫 寫文本文件 讀文本文件 寫二進制文件 讀二進制文件 File類 處理壓縮文件 對象序列化 隨機文件讀寫256.2.1 寫文本文件 本節(jié)知識點 FileWriter類 創(chuàng)建一個磁盤文件 關閉一個磁盤文件 write(

12、) 方法 捕獲I/O異常 BufferedWriter 類6.2 文件讀寫26 在C盤根目錄創(chuàng)建文本文件Hello.txt,并往里寫入若干行文本import java.io.*; class FileWriterTester public static void main ( String args ) throws IOException /main方法中聲明拋出IO異常 String fileName = C:Hello.txt; FileWriter writer = new FileWriter( fileName ); writer.write( Hello!n); writer.w

13、rite( This is my first text file,n ); writer.write( You can see how this is done.n ); writer.write(輸入一行中文也可以n); writer.close(); 6.2.1 寫文本文件(續(xù))例6-26.2 文件讀寫27 打開C盤根目錄下的Hello.txt文件換行有些問題,例6-4中將解決這個問題6.2.1 寫文本文件(續(xù))例6-2運行結果6.2 文件讀寫28 每次運行這個程序,都將刪除已經(jīng)存在的”Hello.txt”文件,創(chuàng)建一個新的同名文件 FileWriter的構造方法有五個,本例是通過一個字符

14、串指定文件名來創(chuàng)建 FileWriter類的write方法向文件中寫入字符6.2 文件讀寫6.2.1 寫文本文件(續(xù))例6-2說明29 Writer類的流可實現(xiàn)內(nèi)部格式到外部磁盤文件格式的轉換 “Hello.txt”是一個普通的ASCII碼文本文件,每個英文字符占一個字節(jié),中文字符占兩個字節(jié) Java程序中的字符串則是每個字符占兩個字節(jié)的,采用Unicode編碼 close方法清空流里的內(nèi)容并關閉它。如果不調用該方法,可能系統(tǒng)還沒有完成所有數(shù)據(jù)的寫操作,程序就結束了6.2.1 寫文本文件(續(xù))例6-2說明(續(xù))6.2 文件讀寫30 處理IO異常import java.io.*; class F

15、ileWriterTester public static void main ( String args ) String fileName = c:Hello.txt ; try /將所有IO操作放入try塊中 FileWriter writer = new FileWriter( fileName ,true ); writer.write( Hello!n); writer.write( This is my first text file,n ); writer.write( You can see how this is done. n ); writer.write(輸入一行中文

16、也可以n); writer.close(); catch ( IOException iox) System.out.println(Problem writing + fileName ); 6.2.1 寫文本文件(續(xù))例6-36.2 文件讀寫31 運行此程序,會發(fā)現(xiàn)在原文件內(nèi)容后面又追加了重復的內(nèi)容,這就是將構造方法的第二個參數(shù)設為true的效果 如果將文件屬性改為只讀屬性,再運行本程序,就會出現(xiàn)IO錯誤,程序將轉入catch塊中,給出出錯信息6.2.1 寫文本文件(續(xù))例6-3說明6.2 文件讀寫32 BufferedWriter類 如果需要寫入的內(nèi)容很多,就應該使用更為高效的緩沖器流類

17、BufferedWriter FileWriter和BufferedWriter類都用于輸出字符流,包含的方法幾乎完全一樣,但BufferedWriter多提供了一個newLine()方法用于換行 不同廠家生產(chǎn)的計算機 (IBM, Apple, VAX, Sun) 對文字的換行方法不同。newLine()方法可以輸出在當前計算機上正確的換行符6.2.1 寫文本文件(續(xù))BufferedWriter類6.2 文件讀寫33 使用BufferedWriter完成例6-2實現(xiàn)的功能import java.io.*; class BufferedWriterTester public static vo

18、id main ( String args ) throws IOExceptionString fileName = C:/newHello.txt ;BufferedWriter out = new BufferedWriter( new FileWriter( fileName ) ); out.write( Hello! ); out.newLine() ; out.write( This is another text file using BufferedWriter, ); out.newLine(); ; out.write( So I can use a common way

19、 to start a newline ); out.close(); 6.2.1 寫文本文件(續(xù))例6-46.2 文件讀寫34 用任何文本編輯器打開newHello.txt都會出現(xiàn)正確的換行效果6.2.1 寫文本文件(續(xù))例6-4運行結果6.2 文件讀寫356.2.2 讀文本文件 本節(jié)知識點 Reader FileReader BufferedReader和readLine() 文本文件復制 6.2 文件讀寫36 FileReader類 從文本文件中讀取字符 繼承自Reader抽象類的子類InputStreamReader BufferedReader 讀文本文件的緩沖器類 具有readLi

20、ne()方法,可以對換行符進行鑒別,一行一行地讀取輸入流中的內(nèi)容 繼承自Reader6.2.2 讀文本文件(續(xù)) 6.2 文件讀寫376.2.2 讀文本文件(續(xù)) 文件輸入方法:BufferedReader in = new BufferedReader(new FileReader( fileName) ); 6.2 文件讀寫38 從Hello.txt中讀取文本并顯示在屏幕上import java.io.*;class BufferedReaderTester public static void main ( String args ) String fileName = C:/Hello

21、.txt , line; try BufferedReader in = new BufferedReader( new FileReader( fileName ) ); line = in.readLine(); /讀取一行內(nèi)容 while ( line != null ) System.out.println( line ); line = in.readLine(); in.close(); catch ( IOException iox ) System.out.println(Problem reading + fileName ); 6.2.2 讀文本文件(續(xù))例6-56.2 文

22、件讀寫39 運行該程序,屏幕上將逐行顯示出Hello.txt文件中的內(nèi)容 FileReader對象:創(chuàng)建后將打開文件,如果文件不存在,會拋出一個IOException BufferedReader類的readLine()方法:從一個面向字符的輸入流中讀取一行文本。如果其中不再有數(shù)據(jù),返回null Reader類的read()方法:也可用來判別文件結束。該方法返回的一個表示某個字符的int型整數(shù),如果讀到文件末尾,返回 -1。據(jù)此,可修改本例中的讀文件部分:int c;while(c=in.read()!= -1) System.out.print(char)c); close()方法:為了操作

23、系統(tǒng)可以更為有效地利用有限的資源,應該在讀取完畢后,調用該方法6.2.2 讀文本文件(續(xù))例6-5說明6.2 文件讀寫40 指定源文件和目標文件名,將源文件的內(nèi)容拷貝至目標文件。調用方式為:java copy sourceFile destinationFile6.2.2 讀文本文件(續(xù))例6-66.2 文件讀寫41 共包括兩個類共包括兩個類 CopyMaker private boolean openFiles() private boolean copyFiles() private boolean closeFiles() public boolean copy(String src,

24、String dst ) FileCopy main() 6.2.2 讀文本文件(續(xù))例6-66.2 文件讀寫42import java.io.*; class CopyMaker String sourceName, destName; BufferedReader source; BufferedWriter dest; String line;6.2 文件讀寫6.2.2 讀文本文件(續(xù))例6-643private boolean openFiles() try source = new BufferedReader(new FileReader( sourceName ); catch

25、( IOException iox ) System.out.println(Problem opening + sourceName ); return false; try dest = new BufferedWriter(new FileWriter( destName ); catch ( IOException iox ) System.out.println(Problem opening + destName ); return false; return true; 6.2.2 讀文本文件(續(xù))例6-66.2 文件讀寫44private boolean copyFiles()

26、 try line = source.readLine(); while ( line != null ) dest.write(line); dest.newLine(); line = source.readLine(); catch ( IOException iox ) System.out.println(Problem reading or writing ); return false; return true; 6.2.2 讀文本文件(續(xù))例6-66.2 文件讀寫45private boolean closeFiles() boolean retVal=true; try so

27、urce.close(); catch ( IOException iox ) System.out.println(Problem closing + sourceName ); retVal = false; try dest.close(); catch ( IOException iox ) System.out.println(Problem closing + destName ); retVal = false; return retVal; 6.2.2 讀文本文件(續(xù))例6-66.2 文件讀寫46 public boolean copy(String src, String d

28、st ) sourceName = src ; destName = dst ; return openFiles() & copyFiles() & closeFiles(); public class FileCopy /一個文件中只能有一個公有類public static void main ( String args ) if ( args.length = 2 ) new CopyMaker().copy(args0, args1); else System.out.println(Please Enter File names); 6.2.2 讀文本文件(續(xù))例6-

29、66.2 文件讀寫47 此文件FileCopy.java編譯后生成FileCopy.class和CopyMaker.class兩個字節(jié)碼文件 運行結果 在命令行方式下執(zhí)行如下命令java FileCopy c:/Hello.txt c:/CopyHello.txt 則在C盤根目錄下會出現(xiàn)CopyHello.txt文件,內(nèi)容與Hello.txt完全相同6.2.2 讀文本文件(續(xù))例6-6運行結果6.2 文件讀寫486.2.3 寫二進制文件 本節(jié)知識點 二進制文件 OutputStream FileOutputStream BufferedOutputStream DataOutputStream

30、 writeInt() writeDouble() writeBytes() 6.2 文件讀寫49 二進制文件 原則上講,所有文件都是由8位的字節(jié)組成的 如果文件字節(jié)中的內(nèi)容應被解釋為字符,則文件被稱為文本文件;如果被解釋為其它含義,則文件被稱為二進制文件 例如文字處理程序,例如字處理軟件Word產(chǎn)生的doc文件中,數(shù)據(jù)要被解釋為字體、格式、圖形和其他非字符信息。因此,這樣的文件是二進制文件,不能用Reader流正確讀取6.2.3 寫二進制文件(續(xù))二進制文件6.2 文件讀寫50 為什么需要二進制文件 輸入輸出更快 比文本文件小很多 有些數(shù)據(jù)不容易被表示為字符6.2.3 寫二進制文件(續(xù))二進

31、制文件6.2 文件讀寫51 抽象類OutputStream 派生類FileOutputStream 用于一般目的輸出(非字符輸出) 用于成組字節(jié)輸出 派生類DataOutputStream 具有寫各種基本數(shù)據(jù)類型的方法 將數(shù)據(jù)寫到另一個輸出流 它在所有的計算機平臺上使用同樣的數(shù)據(jù)格式 其常用的一些方法見表6-2 其中size方法,可作為計數(shù)器,統(tǒng)計寫入的字節(jié)數(shù)6.2.3 寫二進制文件(續(xù))OutputStream類6.2 文件讀寫526.2.3 寫二進制文件(續(xù))表6-26.2 文件讀寫536.2.3 寫二進制文件(續(xù))表6-26.2 文件讀寫546.2.3 寫二進制文件(續(xù))例6-7 將三個

32、int型數(shù)字255/0/1寫入數(shù)據(jù)文件data1.datimport java.io.*; class FileOutputstreamTester public static void main ( String args ) String fileName = c:/data1.dat ; int value0 = 255, value1 = 0, value2 = -1; try DataOutputStream out = new DataOutputStream( new FileOutputStream( fileName ) ); out.writeInt( value0 );

33、out.writeInt( value1 ); out.writeInt( value2 ); out.close(); catch ( IOException iox ) System.out.println(Problem writing + fileName ); 6.2 文件讀寫55 運行結果 運行程序后,在C盤生成數(shù)據(jù)文件data1.dat 用寫字板打開沒有任何顯示 用ultraEdit打開查看其二進制信息,內(nèi)容為00 00 00 FF 00 00 00 00 FF FF FF FF,每個int數(shù)字都是32個bit的 說明 FileOutputStream類的構造方法負責打開文件“d

34、ata1.dat”用于寫數(shù)據(jù) FileOutputStream類的對象與DataOutputStream對象連接,寫基本類型的數(shù)據(jù)6.2.3 寫二進制文件(續(xù))例6-7運行結果6.2 文件讀寫56 BufferedOutputStream 寫二進制文件的緩沖流類 類似于文本文件中的BufferedWriter 對于大量數(shù)據(jù)的寫入,可提高效率 用法示例:DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( fileName ) ) ); 6.2.3 寫二進制文件(續(xù)

35、)BufferedOutputStream類6.2 文件讀寫57 向文件中寫入各種數(shù)據(jù)類型的數(shù),并統(tǒng)計寫入的字節(jié)數(shù)import java.io.*; class BufferedOutputStreamTester public static void main ( String args ) throws IOException String fileName = mixedTypes.dat ; DataOutputStream dataOut = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( f

36、ileName ) ) ); dataOut.writeInt( 0 ); System.out.println( dataOut.size() + bytes have been written.); dataOut.writeDouble( 31.2 ); System.out.println( dataOut.size() + bytes have been written.); dataOut.writeBytes(JAVA); System.out.println( dataOut.size() + bytes have been written.); dataOut.close()

37、; 6.2.3 寫二進制文件(續(xù))例6-86.2 文件讀寫58 運行結果 4 bytes have been written 12 bytes have been written 16 bytes have been written 說明 這個程序可作為字節(jié)計數(shù)器6.2.3 寫二進制文件(續(xù))例6-8運行結果6.2 文件讀寫596.2.4 讀二進制文件 本節(jié)知識點 FileInputStream DataInputStream BufferedInputSteam 讀寫整數(shù) 讀寫單字節(jié) 6.2 文件讀寫60 過濾流 讀或寫的同時對數(shù)據(jù)進行處理 通過另外一個流來構造一個過濾流 大部分java.i

38、o 包所提供過濾流都是FilterInputStream和FilterOutputStream的子類 DataInputStream 和 DataOutputStream BufferedInputStream 和 BufferedOutputStream LineNumberInputStream PushbackInputStream PrintStream6.2.4 讀二進制文件(續(xù))過濾流6.2 文件讀寫61 讀取例6-7創(chuàng)建的數(shù)據(jù)文件中的3個int型數(shù)字,顯示相加結果import java.io.*;class DataInputStreamTester public static

39、void main ( String args ) String fileName = c:data1.dat; int sum = 0; try DataInputStream instr = new DataInputStream( new BufferedInputStream(new FileInputStream( fileName ); sum += instr.readInt(); sum += instr.readInt(); sum += instr.readInt(); System.out.println( The sum is: + sum ); instr.close

40、(); catch ( IOException iox ) System.out.println(Problem reading + fileName ); 6.2.4 讀二進制文件(續(xù))例6-106.2 文件讀寫62 該程序顯示結果是254 分析 readInt方法可以從輸入流中讀入4個字節(jié)并將其當作int型數(shù)據(jù) 由于知道文件中存儲的是3個int型數(shù)據(jù),所以使用了3個讀入語句 如果不知道數(shù)據(jù)的個數(shù)該怎么辦呢?因為DataInputStream的讀入操作如遇到文件結尾就會拋出EOFException異常,所以我們可以將讀操作放入try塊中6.2.4 讀二進制文件(續(xù))例6-10運行結果6.2

41、文件讀寫63 將讀操作放入try塊中,使遇到文件結尾就會拋出EOFException異常,進入到相應的catch塊中try while ( true ) sum += instr.readInt();catch ( EOFException eof ) System.out.println( The sum is: + sum ); instr.close();6.2.4 讀二進制文件(續(xù))例6-10修改6.2 文件讀寫64 如果沒有讀到結尾,在讀取過程中發(fā)生的異常屬于IOException,這樣就需要我們再加一個catch塊處理這種異常 一個try塊后面可以跟不止一個catch塊,用于處理各

42、種可能發(fā)生的異常 我們可以在上段代碼后再加上用于捕捉IOException的代碼段如下catch ( IOException eof ) System.out.println( Problem reading input ); instr.close(); 6.2.4 讀二進制文件(續(xù))例6-10修改6.2 文件讀寫65 如果catch塊中的close方法也發(fā)生異常,現(xiàn)在就沒法捕獲了。解決方法可以有 在main方法中拋出異常 比較簡單 缺點是沒有catch塊,因而無法對異常進行進一步處理,例如給出提示信息 使用嵌套的try塊6.2.4 讀二進制文件(續(xù))例6-10修改6.2 文件讀寫66imp

43、ort java.io.*;class DataInputStreamTester public static void main ( String args ) String fileName = c:/data1.dat ; long sum = 0; try DataInputStream instr = new DataInputStream( new BufferedInputStream(new FileInputStream(fileName); try while ( true ) sum += instr.readInt(); catch ( EOFException eof

44、 ) System.out.println( The sum is: + sum ); instr.close(); catch ( IOException iox ) System.out.println(IO Problems with + fileName ); 6.2.4 讀二進制文件(續(xù))例6-116.2 文件讀寫67 由于文本文件的存儲方式其實也是二進制代碼,因此也可使用InputStream類的方法讀取 用InputStream類讀取文本文件并打印在屏幕上import java.io.*;public class InputStreamTester public static v

45、oid main(String args) throws IOException FileInputStream s=new FileInputStream(c:/Hello.txt); int c; while (c = s.read() != -1) /讀取1字節(jié),結束返回-1 System.out.write(c); s.close(); 6.2.4 讀二進制文件(續(xù))例6-126.2 文件讀寫68 DataOutputStream的writeByte方法 public final void writeByte(int b) throws IOException 將int的最不重要字節(jié)寫

46、入輸出流 DataInputStream的readUnsignedByte方法 public final int readUnsignedByte() throws IOException 從輸入流中讀取1字節(jié)存入int的最不重要字節(jié)6.2.4 讀二進制文件(續(xù))讀寫字節(jié)6.2 文件讀寫69 從命令行輸入源文件名和目標文件名,將源文件復制為目標文件。import java.io.*; class CopyBytes public static void main ( String args ) DataInputStream instr; DataOutputStream outstr; if

47、 ( args.length != 2 ) System.out.println(Please enter file names); return; try instr = new DataInputStream(new BufferedInputStream(new FileInputStream( args0 ); outstr = new DataOutputStream(new BufferedOutputStream(new FileOutputStream( args1 ); 6.2.4 讀二進制文件(續(xù))文件復制程序6.2 文件讀寫70 try int data; while (

48、 true ) data = instr.readUnsignedByte() ; outstr.writeByte( data ) ; catch ( EOFException eof ) outstr.close(); instr.close(); return; catch ( FileNotFoundException nfx ) System.out.println(Problem opening files ); catch ( IOException iox ) System.out.println(IO Problems ); 6.2.4 讀二進制文件(續(xù))文件復制程序6.2 文件讀寫716.2.5 File 類 表示磁盤文件信息 定義了一些與平臺無關的方法來操縱文件 創(chuàng)建、刪除文件 重命名文件 判斷文件的讀寫權限及是否存在 設置和查詢文件的最近修改時間等 構造文件流可以使用File類的對象作為參數(shù)6.2 文件讀寫726.2.5 File類(續(xù))構造方法6.2 文件讀寫736.2.5 File類(續(xù))常用方法6.2 文件讀寫74 例6-13 在C盤創(chuàng)建文件Hello.txt,如果存在則刪除舊文件,不存在則直接創(chuàng)建新的import java.io.*;public class FileTester public static void main(String a

溫馨提示

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

評論

0/150

提交評論