




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六章第六章 輸入輸入/輸出流和文件輸出流和文件6.1 輸入/輸出流6.2 文件讀寫16.1 輸入/輸出流?通常程序需要從外部獲取/輸出信息?這個“外部”范圍很廣,包括諸如鍵盤、顯示器、文件、磁盤、網絡、另外一個程序等?“信息”也可以是任何類型的,例如一個對象、串字符、圖像、聲音等?通過使用java.io包中的輸入/輸出流類就可以達到輸入輸出信息的目的26.1.1 I/O流的概念流的概念?流:數據從計算機的輸入向輸出流動,即流的產生。?流有兩種:文本流(字符)和二進制流(字節)?在Java里,流是一些類。?在Java中將信息的輸入與輸出過程抽象為I/O流?輸入是指數據流入程序輸入是指數據流入程
2、序?輸出是指數據從程序流出輸出是指數據從程序流出?一個流就是一個從源流向目的地的數據序列36.1.1 I/O流的概念流的概念?文件File也是一個邏輯概念。計算機的所有設備都可理解為一個文件。流可與文件建立聯系。?java.lang.Objectjava.io.Filejava.io.RandomAccessFile java.io.InputStreamjava.io.OutputStreamjava.io.Readerjava.io.Writer?IO流類一旦被創建就會自動打開?通過調用close方法,可以顯式關閉任何一個流;?如果流對象不再被引用,Java的垃圾回收機制也會隱式地關閉它4
3、6.1.1 I/O流的概念流的概念?輸入流?為了從信息源獲取信息,程序打開一個輸入流,程序可從輸入流讀取信息?輸出流?當程序需要向目標位置寫信息時,便需要打開一個輸出流,程序通過輸出流向這個目標位置寫信息56.1.1 I/O流的概念流的概念?源和目標的類型對象源? 目標? 或兩者?disk fileBothrunning programBothmonitorDestinationkeyboardSourceInternet connectionBothimage scannerSourcemouseSource66.1.1 I/O流的概念流的概念?讀寫數據的方法?不論數據從哪來,到哪去,也不論
4、數據本身是何類型,讀寫數據的方法大體上都是一樣的:?打開一個流,讀/寫信息,關閉流。76.1.2 預定義的I/O流類概述?輸入/輸出流可以從以下幾個方面進行分類?從流的方向劃分?輸入流輸入流?輸出流輸出流?從流的分工劃分?節點流節點流?處理流處理流?從流的內容劃分?面向字符的流面向字符的流?面向字節的流面向字節的流86.1.2 預定義的I/O流類概述?java.io包的頂級層次結構?面向字符的流:專門用于字符數據面向字節的流:用于一般目的96.1.2 預定義的I/O流類概述?面向字符的流?針對字符數據的特點進行過優化,提供一些面向字符的有用特性源或目標通常是文本文件?實現內部格式和文本文件中的
5、外部格式之間轉換?內部格式:16-bit char 數據類型外部格式:?UTF(Universal character set Transformation Format):很多人:很多人稱之為稱之為Universal Text Format包括包括ASCII 碼及非碼及非ASCII 碼字符,比如:碼字符,比如: 斯拉夫斯拉夫(Cyrillic)字符字符, 希臘字符希臘字符, 亞洲字符等亞洲字符等106.1.2 預定義的I/O流類概述?面向字符的抽象類 Reader和Writer?java.io包中所有字符流的抽象基類?Reader提供了輸入字符的API?Writer提供了輸出字符的API?它
6、們的子類又可分為兩大類?節點流:從數據源讀入數據或往目的地寫出數據節點流:從數據源讀入數據或往目的地寫出數據?處理流:對數據執行某種處理處理流:對數據執行某種處理?多數程序使用這兩個抽象類的一系列子類來讀入/寫出文本信息?例如例如FileReader/FileWriter用來讀用來讀/寫文本文件寫文本文件11陰影部分為節點流126.1.2 預定義的I/O流類概述?面向字節的流?數據源或目標中含有非字符數據,必須用字節流來輸入/輸出?通常被用來讀寫諸如圖片、聲音之類的二進制數據?絕大多數數據是被存儲為二進制文件的,世界上的文本文件大約只能占到2,通常二進制文件要比含有相同數據量的文本文件小得多。
7、136.1.2 預定義的I/O流類概述?面向字節的流?InputStream和OutputStream?是用來處理8位字節流的抽象基類,程序使用這兩個類的子類來讀寫8位的字節信息?分為兩部分?節點流節點流?處理流處理流146.1.2 預定義的I/O流類概述?面向字節的流陰影部分為節點流156.1.2 預定義的I/O流類概述?標準輸入輸出?標準輸入輸出流屬于System類。System類實現了用戶使用資源時的系統無關編程接口;是final類;所有變量和方法都是static的;不用初始化(new )就可以使用System類的靜態成員變量?System.in: InputStream類型的,代表標準
8、輸入流,這類型的,代表標準輸入流,這個流是已經打開了的,默認狀態對應于鍵盤輸入。個流是已經打開了的,默認狀態對應于鍵盤輸入。?System.out:PrintStream類型的,代表標準輸出流,類型的,代表標準輸出流,默認狀態對應于屏幕輸出默認狀態對應于屏幕輸出?System.err:PrintStream類型的,代表標準錯誤信息輸類型的,代表標準錯誤信息輸出流,默認狀態對應于屏幕輸出出流,默認狀態對應于屏幕輸出166.1.2 預定義的I/O流類概述?標準輸入輸出?System.inpublic final static InputStream in = new InputStream();r
9、ead(), read(byte b,int off, int len), read(byte b)?System.outpublic final static PrintStream out = new PrintStream(); print(), println(), write()?System.errpublic final static PrintStream err = new PrintStream(); print(), println(), write()176.1.2 預定義的I/O流類概述?從鍵盤讀入信息并在顯示器上顯示import java.io.*;public c
10、lass Echo public static void main(String args) throws IOException BufferedReader in = new BufferedReader(new InputStreamReader(System.in);String s;while(s = in.readLine().length() != 0)System.out.println(s);運行結果運行結果 Hello!Hello!186.1.2 預定義的I/O流類概述?System.in?程序啟動時由Java系統自動創建的流對象,它是原始的字節流,不能直接從中讀取字符,需
11、要對其進行進一步的處理?InputStreamReader(System.in)?以System.in為參數創建一個InputStreamReader流對象,相當于字節流和字符流之間的一座橋梁,讀取字節并將其轉換為字符?BufferedReader in?對InputStreamReader處理后的信息進行緩沖,以提高效率196.1.2 預定義的I/O流類概述?一個方便的掃描API: ?把文本轉化成基本類型或者StringScanner s = new Scanner(System.in);int n = s.nextInt();?還有下列方法:nextByte(), nextDouble()
12、,nextFloat,nextInt(),nextLine(),nextLong(),nextShort()206.1.2 預定義的I/O流類概述?處理流?不直接與數據源或目標相連,而是基于另一個流來構造從流讀寫數據的同時對數據進行處理InputStreamReader和BufferedReader都屬于處理流?InputStreamReader讀取字節并轉換為字符讀取字節并轉換為字符BufferedReader對另一個流產生的數據進行緩沖對另一個流產生的數據進行緩沖用一行表達式實現:BufferedReader stdin = new BufferedReader(new nputStrea
13、mReader(System.in) ); 216.1.2 預定義的I/O流類概述?I/O異常?多數IO方法在遇到錯誤時會拋出異常,因此調用這些方法時必須?在方法頭聲明拋出在方法頭聲明拋出IOException異常異常?或者在或者在try塊中執行塊中執行IO,然后捕獲,然后捕獲IOException22第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件?讀二進制文件?File類?對象序列化?隨機文件讀寫236.2.1 寫文本文件?FileWriter類?創建一個磁盤文件?關閉一個磁盤文件?write() 方法?捕獲I/O異常?BufferedW
14、riter 類246.2.1 寫文本文件?在C盤根目錄創建文本文件Hello.txt,并往里寫入若干行文本import java.io.*; class WriteTxtFile 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.write( This is my
15、first text file,n ); writer.write( You can see how this is done.n ); writer.write( 輸入一行中文也可以輸入一行中文也可以n);writer.close(); 256.2.1 寫文本文件?打開C盤根目錄下的Hello.txt文件?換行有些問題換行有些問題?每次運行這個程序,都將刪除已經存在的”Hello.txt”文件,創建一個新的同名文件?FileWriter的構造方法有五個,本例是通過一個字符串指定文件名來創建?FileWriter類的write方法向文件中寫入字符266.2.1 寫文本文件?上例WriteTxt
16、File說明?Writer類的流可實現內部格式到外部磁盤文件格式轉換“Hello.txt” 是一個普通的ASCII碼文本文件,每個英文字符占一個字節,中文字符占兩個字節Java程序中的字符串則是每個字符占兩個字節的,采用Unicode編碼close方法清空流里的內容并關閉它。如果不調用該方法,可能系統還沒有完成所有數據的寫操作,程序就結束了276.2.1 寫文本文件?處理處理IO異常異常import java.io.*; class WriteTxtFile2 public static void main ( String args ) String fileName = c:Hello.t
17、xt ;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( 輸入一行中文也可以輸入一行中文也可以n);writer.close();catch ( IOException iox) System.out.println(Pro
18、blem writing + fileName ); 286.2.1 寫文本文件?運行此程序,會發現在原文件內容后面又追加了重復的內容,這就是將構造方法的第二個參數設為true的效果?如果將文件屬性改為只讀屬性,再運行本程序,就會出現IO錯誤,程序將轉入catch塊中,給出出錯信息296.2.1 寫文本文件?BufferedWriter類?如果需要寫入的內容很多,就應該使用更為高效的緩沖器流類BufferedWriter?FileWriter和BufferedWriter類都用于輸出字符流,包含的方法幾乎完全一樣,但BufferedWriter多提供了一個newLine()方法用于換行?不同廠
19、家生產的計算機不同廠家生產的計算機 (IBM, Apple, VAX, Sun) 對文字的對文字的換行方法不同。換行方法不同。?newLine()方法可以輸出在當前計算機上正確的換行符方法可以輸出在當前計算機上正確的換行符306.2.1 寫文本文件?使用BufferedWriter完成例WriteTxtFile實現的功能import java.io.*; /BufferedWriterclass BufferWriterEx public static void main ( String args ) throws IOException String fileName = C:newHel
20、lo.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 to start a newline ); out.close();316.2.1 寫文本文件?用任何文本編輯器打開newHello.txt都會
21、出現正確的換行效果32第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件?讀二進制文件?File類?對象序列化?隨機文件讀寫336.2.2 讀文本文件?本節知識點本節知識點?Reader ?FileReader ?BufferedReader和和readLine?文本文件復制文本文件復制346.2.2 讀文本文件?FileReader類?從文本文件中讀取字符?繼承自Reader抽象類的子類InputStreamReader?BufferedReader類?讀文本文件的緩沖器類?具有readLine()方法,可以對換行符進行鑒別,一行一行地讀取輸
22、入流中的內容?繼承自Reader?文件輸入方法:BufferedReader in = new BufferedReader(new FileReader( fileName) );356.2.2 讀文本文件?從Hello.txt中讀取文本并顯示在屏幕上import java.io.*;class ReadTxtFilepublic static void main ( String args ) String fileName = C:Hello.txt;try BufferedReader in = new BufferedReader(new FileReader( fileName )
23、 );line = in.readLine(); /讀取一行內容讀取一行內容while ( line != null ) System.out.println( line );line = in.readLine();in.close(); catch ( IOException iox ) System.out.println(Problem reading + fileName ); 366.2.2 讀文本文件?說明?運行該程序,屏幕上將逐行顯示出Hello.txt文件中的內容?FileReader對象:創建后將打開文件,如果文件不存在,會拋出一個IOException?BufferedR
24、eader類的readLine()方法:從一個面向字符的輸入流中讀取一行文本。如果其中不再有數據,返回null?Reader類的read()方法:也可用來判別文件結束。該方法返回的一個表示某個字符的int型整數,如果讀到文件末尾,返回 -1。據此,可修改本例中的讀文件部分:int c;while(c=in.read()!= -1) System.out.print(char)c);?close()方法:為了操作系統可以更為有效地利用有限的資源,應該在讀取完畢后,調用該方法376.2.2 讀文本文件?指定源文件和目標文件名,將源文件的內容拷貝至目標文件。調用方式為:java copy sourc
25、eFile destinationFile386.2.2 讀文本文件?例子?java CopyFileEx sourcefile destinationfile?共包括兩個類?CopyMaker?private boolean openFiles()?private boolean copyFiles()?private boolean closeFiles()?public boolean copy(String src, String dst ) ?CopyFileEx?main()396.2.2 讀文本文件?例子例子import java.io.*; class CopyMaker St
26、ring sourceName, destName;BufferedReader source;BufferedWriter dest;String line;40private boolean openFiles() try source = new BufferedReader(new FileReader( sourceName );catch ( IOException iox ) System.out.println(Problem opening + sourceName ); return false;try dest = new BufferedWriter(new FileW
27、riter( destName ); catch ( IOException iox )System.out.println(Problem opening + destName );return false;return true; 41private boolean copyFiles() try line = source.readLine(); while ( line != null ) dest.write(line); dest.newLine(); line = source.readLine(); catch ( IOException iox ) System.out.pr
28、intln(Problem reading or writing );return false;return true;42private boolean closeFiles() boolean retVal=true;try source.close(); catch ( IOException iox ) System.out.println(Problem closing + sourceName );retVal = false;try dest.close(); catch ( IOException iox ) System.out.println(Problem closing
29、 + destName );retVal = false;return retVal; public boolean copy(String src, String dst ) sourceName = src ;destName = dst ;return openFiles() & copyFiles() & closeFiles();43public class CopyFileEx /一個文件中只能有一個公有類一個文件中只能有一個公有類public static void main ( String args ) if ( args.length = 2 ) new C
30、opyMaker().copy(args0, args1);else System.out.println(Please Enter File names); ?此文件CopyFileEx.java編譯后生成CopyFileEx.class和CopyMaker.class兩個字節碼文件運行結果?在命令行方式下執行如下命令java CopyFileEx c:Hello.txt c:CopyHello.txt?則在C盤根目錄下會出現CopyHello.txt文件,內容與Hello.txt完全相同44第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件
31、?讀二進制文件?File類?對象序列化?隨機文件讀寫456.2.3 寫二進制文件?本節知識點?二進制文件?OutputStream ?FileOutputStream ?BufferedOutputStream ?DataOutputStream ?writeInt() ?writeDouble() ?writeBytes() 466.2.3 寫二進制文件?二進制文件?原則上講,所有文件都是由8位的字節組成的如果文件字節中的內容應被解釋為字符,則文件被稱為文本文件;如果被解釋為其它含義,則文件被稱為二進制文件例如文字處理程序,例如字處理軟件Word產生的doc文件中,數據要被解釋為字體、格式、
32、圖形和其他非字符信息。因此,這樣的文件是二進制文件,不能用Reader流正確讀取。輸入輸出更快比文本文件小很多有些數據不容易被表示為字符?為什么需要二進制文件?476.2.3 寫二進制文件?抽象類OutputStream?派生類FileOutputStream?用于一般目的輸出(非字符輸出)用于一般目的輸出(非字符輸出)?用于成組字節輸出用于成組字節輸出?派生類DataOutputStream?具有寫各種基本數據類型的方法具有寫各種基本數據類型的方法?將數據寫到另一個輸出流將數據寫到另一個輸出流?它在所有的計算機平臺上使用同樣的數據格式它在所有的計算機平臺上使用同樣的數據格式?其中其中size
33、方法,可作為計數器,統計寫入的字節數方法,可作為計數器,統計寫入的字節數486.2.3 寫二進制文件?將三個將三個int型數字型數字255/0/1寫入數據文件寫入數據文件data1.datimport java.io.*; class WriteByteFileExpublic static void main ( String args ) String fileName = c:/data1.dat ;int value0 = 255, value1 = 0, value2 = -1;try DataOutputStream out = new DataOutputStream(new F
34、ileOutputStream( fileName ) );out.writeInt( value0 );out.writeInt( value1 );out.writeInt( value2 );out.close();catch ( IOException iox )System.out.println(Problem writing + fileName ); 496.2.3 寫二進制文件?運行結果?運行程序后,在C盤生成數據文件data1.dat?用寫字板打開沒有任何顯示?用UltraEdit打開查看其二進制信息,內容為00 00 00 FF 00 00 00 00 FF FF FF
35、FF,每個int數字都是32個bit的?說明?FileOutputStream類的構造方法負責打開文件“data1.dat” 用于寫數據?FileOutputStream類的對象與DataOutputStream對象連接,寫基本類型的數據506.2.3 寫二進制文件?BufferedOutputStream 類?寫二進制文件的緩沖流類?類似于文本文件中的BufferedWriter?對于大量數據的寫入,可提高效率?用法示例:DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputS
36、tream( fileName ) ) ); 516.2.3 寫二進制文件?向文件中寫入各種數據類型的數,并統計寫入的字節數import java.io.*; class WriteByteFileEx2public static void main ( String args ) throws IOException String fileName = mixedTypes.dat ;DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream( fileName )
37、 ) );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();526.2.3 寫二進制文件
38、?運行結果?4 bytes have been written?12 bytes have been written?16 bytes have been written?說明?這個程序可作為字節計數器53第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件?讀二進制文件?File類?對象序列化?隨機文件讀寫546.2.4 讀二進制文件?本節知識點?FileInputStream?DataInputStream?BufferedInputSteam ?讀寫整數?讀寫單字節556.2.4 讀二進制文件?過濾流?讀或寫的同時對數據進行處理?通過另外一
39、個流來構造一個過濾流?大部分java.io 包所提供過濾流都是FilterInputStream和FilterOutputStream的子類?DataInputStream 和和 DataOutputStream ?BufferedInputStream 和和 BufferedOutputStream ?LineNumberInputStream ?PushbackInputStream ?PrintStream566.2.4 讀二進制文件?讀取例WriteByteFileEx類創建的數據文件中的3個int型數字,顯示相加結果import java.io.*;class ReadByteFil
40、eEx public static 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 )
41、;instr.close(); catch ( IOException iox ) System.out.println(Problem reading + fileName ); 576.2.4 讀二進制文件?該程序顯示結果是254分析?readInt方法可以從輸入流中讀入4個字節并將其當作int型數據?由于知道文件中存儲的是3個int型數據,所以使用了3個讀入語句?如果不知道數據的個數該怎么辦呢??因為DataInputStream的讀入操作如遇到文件結尾就會拋出EOFException異常,所以我們可以將讀操作放入try塊中。586.2.4 讀二進制文件?修改ReadByteFileEx
42、類?將讀操作放入try塊中,使遇到文件結尾就會拋出EOFException異常,進入到相應的catch塊中trywhile ( true ) sum += instr.readInt();catch ( EOFException eof )System.out.println( The sum is: + sum );instr.close();596.2.4 讀二進制文件?繼續修改ReadByteFileEx類?如果沒有讀到結尾,在讀取過程中發生的異常屬于IOException,這樣就需要我們再加一個catch塊處理這種異常?一個try塊后面可以跟不止一個catch塊,用于處理各種可能發生的
43、異常?我們可以在上段代碼后再加上用于捕捉IOException的代碼段如下catch ( IOException eof ) System.out.println( Problem reading input );instr.close();606.2.4 讀二進制文件?如果catch塊中的close方法也發生異常,現在就沒法捕獲了。解決方法可以有?在main方法中拋出異常?比較簡單比較簡單?缺點是沒有缺點是沒有catch塊,因而無法對異常進行進一步塊,因而無法對異常進行進一步處理,例如給出提示信息處理,例如給出提示信息?使用嵌套的try塊61import java.io.*;class Re
44、adByteFileEx 2public 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 ) System.out.println( The sum is:
45、 + sum );instr.close();catch ( IOException iox ) System.out.println(IO Problems with + fileName ); 626.2.4 讀二進制文件?讀寫字節?DataOutputStream的writeByte方法?public final void writeByte(int b) throws IOException?將int的最不重要字節寫入輸出流?DataInputStream的readUnsignedByte方法?public final int readUnsignedByte() throws IOE
46、xception?從輸入流中讀取1字節存入int的最不重要字節636.2.4 讀二進制文件?從命令行輸入源文件名和目標文件名,將源文件復制為目標文件。import java.io.*; class CopyBytes public static void main ( String args ) DataInputStream instr;DataOutputStream outstr;if ( args.length != 2 ) System.out.println(Please enter file names);return;try instr = new DataInputStrea
47、m(new BufferedInputStream(new FileInputStream( args0 );outstr = new DataOutputStream(new BufferedOutputStream(new FileOutputStream( args1 ); 64try int data;while ( true ) data = instr.readUnsignedByte() ;outstr.writeByte( data ) ;catch ( EOFException eof ) outstr.close(); instr.close(); return; catc
48、h ( FileNotFoundException nfx ) System.out.println(Problem opening files ); catch ( IOException iox ) System.out.println(IO Problems ); 65第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件?讀二進制文件?File類?對象序列化?隨機文件讀寫666.2.5 File類?表示磁盤文件信息?定義了一些與平臺無關的方法來操縱文件?創建、刪除文件?重命名文件?判斷文件的讀寫權限及是否存在?設置和查詢文件的最近修改時間等
49、?構造文件流可以使用 File類的對象作為參數67java.io.File+File(pathname:String)+File(parent:String, 根據根據pathname創建創建File對象。對象。pathname可以是文可以是文件或目錄件或目錄在在parent這個目錄下,創建這個目錄下,創建File對象,對象,child可以使文件可以使文件child:String)或目錄或目錄+File(parent:File, child:String)同上,只是同上,只是parent是一個是一個File對象對象+exists():boolean文件或目錄是否存在文件或目錄是否存在+canR
50、ead():boolean是否可讀是否可讀+canWrite():boolean是否可寫是否可寫+isDirectory():boolean是否為目錄是否為目錄+isFile():boolean是否為文件是否為文件+isAbsolute():boolean本本File對象是否采用絕對路徑來創建的對象是否采用絕對路徑來創建的+isHidden():boolean是否為隱藏文件是否為隱藏文件+getAbsolutePath():String得到絕對路徑得到絕對路徑+getCanonicalPath():String得到規范的絕對路徑得到規范的絕對路徑+getName():String得到文件得到文
51、件/目錄名目錄名+getPath():String得到路徑得到路徑+getParent():String得到父目錄的路徑名得到父目錄的路徑名+lastModified():long最后修改時間最后修改時間+delete():boolean刪除刪除+renameTo(dest:File):boolean重命名重命名686.2.5 File類public classFileTest public static viodmain(String args) java.io.File file = new java.io.File(“image%up.gif);System.out.println(Do
52、es it exist? + file.exists();System.out.println(Can it be read? + file.canRead();System.out.println(Can it be written? + file.canWrite();System.out.println(Is it a directory? + file.isDirectory();System.out.println(Is it a file? + file.isFile();System.out.println(Is it absolute? + file.isAbsolute();
53、System.out.println(Is it hidden? + file.isHidden();System.out.println(Absolute path is + file.getAbsolutePath();System.out.println(Last modified on + new java.util.Date(file.lastModified(); Does it exist? trueCan it be read? trueCan it be written? trueIs it a directory? falseIs it a file? trueIs it
54、absolute? falseIs it hidden? falseAbsolute path is E:FreePPAndroidprojectjava-testimage%up.gifLast modified on Thu Aug 06 16:41:51 CST 2012696.2.5 File類?在C盤創建文件Hello.txt,如果存在,則刪除舊文件,不存在則直接創建新的import java.io.*;public class FileEx public static void main(String args) File f=new File(c:+File.separator+
55、Hello.txt); if (f.exists()f.delete();elsetryf.createNewFile();catch(Exception e) System.out.println(e.getMessage();706.2.5 File類?運行結果?因為在前例中已經創建了c:Hello.txt,所以第一次運行將刪除這個文件?第二次運行則又創建了一個此名的空文件?分析?在試圖打開文件之前,可以使用File類的isFile方法來確定File對象是否代表一個文件而非目錄)?還可通過exists方法判斷同名文件或路徑是否存在,進而采取正確的方法,以免造成誤操作716.2.5 File
56、類類-改進的文件復制程序改進的文件復制程序import java.io.*; class NewCopyBytes public static void main ( String args ) DataInputStream instr;DataOutputStream outstr;if ( args.length != 2 ) System.out.println(Please Enter file names!);return;File inFile = new File( args0 );File outFile = new File( args1 );if ( outFile.ex
57、ists() ) System.out.println( args1 + already exists); return; if ( !inFile.exists() ) System.out.println( args0 + does not exist); return; 72try instr = new DataInputStream(new BufferedInputStream(new FileInputStream( inFile );outstr = new DataOutputStream(new BufferedOutputStream(new FileOutputStre
58、am( outFile );try int data;while ( 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 Prob
59、lems ); 73第六章 輸入/輸出流和文件6.1 輸入/輸出流6.2 文件讀寫?寫文本文件?讀文本文件?寫二進制文件?讀二進制文件?File類?對象序列化?隨機文件讀寫746.2.6 對象序列化(串行化)?對象序列化?概念:為了保存在內存中的各種對象的狀態,并且可以把保存的對象狀態再讀出來。Java提供一種保存對象狀態的機制序列化(串行化) 。?目的:a)內存中的對象保存到一個文件中或者數據庫中;b)用套接字在網絡上傳送對象;c)通過RMI傳輸對象;?任務:寫出對象實例變量的數值。如果變量是另一個對象的引用,則引用的對象也要序列化。?方法:只有實現了Serializable接口的類的對象才
60、可以被序列化;該對象必須與一定的對象輸入和輸出流聯系進行狀態保存和狀態恢復。756.2.6對象序列化?保存對象的信息,在需要的時候,再讀取這個對象?內存中的對象在程序結束時就會被垃圾回收機制清除?用于對象信息存儲和讀取的輸入輸出流類:?ObjectInputStream?ObjectOutputStream766.2.6對象序列化?ObjectInputStream和ObjectOutputStream?實現對象的讀寫?通過通過ObjectOutputStream把對象寫入磁盤文件把對象寫入磁盤文件?通過通過ObjectInputStream把對象讀入程序把對象讀入程序?不保存對象的transient和sta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省吉安市峽江縣2025年三下數學期末統考試題含解析
- 研究與開發合同
- 版權轉讓合同協議書范本
- 江蘇省吳江市青云中學2025年校初三第四次模擬數學試題含解析
- 山西省臨汾市曲沃縣重點名校2024-2025學年初三1月月考生物試題含解析
- 環保設備購銷合同模板
- 天津市北辰區名校2025年初三第二學期期末檢測試題物理試題含解析
- 灌溉工程承包合同
- 遼寧省鐵嶺市昌圖縣2018-2019學年八年級上學期期末考試物理試題【含答案】
- 2025年黑龍江省聯考高考模擬歷史質檢試卷A(含答案)
- 以一流課程建設為導向的概率論與數理統計課程教學改革與實踐
- 音樂課件《節奏與節拍》
- 物理教師老師個人簡歷
- 預防頸椎病的健康宣教
- 光伏工程施工安全方案
- 聲樂課課件教學
- 泰山產業領軍人才申報書
- GB/T 44395-2024激光雷達測風數據可靠性評價技術規范
- 2024年浙江省金華市東陽市橫店鎮三校中考二模道德與法治試題(原卷版)
- 杭州市上城區政務服務中心招聘筆試真題2022
- 中華聯合保險集團股份有限公司行測筆試題庫2024
評論
0/150
提交評論