




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高等教育自學考試Java語言程序設計(一)海天培訓學校主講教師: 劉波第九章輸入和輸出流學習重難點及要求n 重點:字節流和字符流的輸入和輸出,緩沖式輸入輸出,以及使用文件對話框的方法。n 難點:緩沖式輸入輸出、隨機訪問,使用文件對話框指定輸入輸出文件n 要求:一般掌握。考試分值約占5%學習內容n 9.1 字節流和字符流n 9.2 緩沖式輸入輸出n 9.3 隨機訪問n 9.4 文件對話框n對 Java 程序而言,輸入/輸出包括: 對外設通道的輸入/輸出 對文件的讀和寫 對網絡數據的讀和寫nJava 語言采用流(stream)的機制實現輸入和輸出。 流是一種有方向的字節/字符數據序列。程序為獲取數
2、據,打開一個來自數據源的流,通過流讀取數據。程序為輸出數據,打開一個到目的地的流,就可以將數據輸出到目的地 對于程序來說,/O 流提供一條數據通道,輸入流指的是數據的來源,程序從輸入流中讀取數據;輸出流是數據要去的目的地,程序向輸出流寫的數據被傳送到目的地。 雖然大多數情況,I/O 流與磁盤文件有關,但數據源也可以是鍵盤、鼠標、內存,目的地也可以是內存、顯示器。 實現輸入/輸出操作的類庫在java.io 包中。9.1 字節流和字符流n File 對象是 File 類的實例。 它是在建立輸入輸出流對象之前先建立的一個對象 它對應一個目錄或文件。對象的屬性包括文件路徑、名字、文件長度、可否讀寫等。
3、 File 對象只用來命名文件、查詢文件屬性和處理目錄,不提供讀寫文件操作。 n File 類常用的構造方法: () File (String s),由 s 確定 File 對象的文件名。 () File (String directory , String s),由 directory 確定 File 對象的文件目錄,由 s確定文件名。9.1.1 File 對象n Java 程序的輸入和輸出流稱為流對象, 輸入輸出流由文件名或 File 對象創建。 n 文件讀寫的主要操作包括:建立流對象、讀數據、寫數據和關閉流。n 根據輸入輸出數據的類型是字節還是字符,java.io 提供兩種基本抽象類:
4、字節流用于讀寫二進制數據,比如圖像和聲音文件等。字節流讀和寫操作由FileInputStream類和FileOutputStream類提供支持。它們分別是 InputStream 和 OutputStream 類的子類。字節流數據是8位的 字符流數據是16 位的Unicode字符。讀和寫操作由FileReader 類和FileWriter 類提供支持。它們分別是 Reader 和 riter 的子類。 9.1.2 流對象n 1 建立流對象 n 創建輸入輸出流對象的常用構造方法用種,如: FileInputStream (String name), 直接指定的文件名創建輸入流 FileInput
5、Stream (File filename), 用文件對象創建輸入流。 n 創建FileOutputStream類、FileReader類和FileWriter類的流對象與FileInputStream完全類似。n 由于使用輸入流的構造方法創建輸入流時,可能會出現FileNotFoundException異常。所以創建輸入流的代碼必須出現在trycatch結構中。9.1.2 流對象n 1 建立流對象例: try FileInputStream ins = new FileinputStream (“myfile.data”);catch ( FileNotFoundException e) S
6、ystem.out.println(“文件找不到:”+e); 9.1.2 流對象n 2 輸入流的常用方法 nFileInputStream類包含下面用于讀字節和字節數組的方法: (1)int read()從輸入流讀取下一個字節,返回一個整數(該整數即讀出的數據:將8位字節折算成十進制整數),整數范圍在255 之間。 (2)int read (byte b), 從輸入流讀取長度為 b.length 的字節數據,寫入到字節數組 b, 并返回實際所讀取的字節數。 (3)int read (byte b, int off, int len),從數據流中讀取長度為 len 的字節數據,寫入到字節數組 b
7、 中從下標 off 開始的數組元素中,并返回實際讀取的字節數。 n使用以上三個方法時,如果在讀數據之前,已到達輸入的末端位置,沒有讀入一個字節數據,用返回-1 表示流在讀之前已結束。9.1.2 流對象n 2 輸入流的常用方法 nFileReader類包含下面用于讀字符和字符數組的方法: (1)int read(), 從輸入流讀取下一個字符。 返回的整數即該字符的Unicode值。如果讀前已到流的末尾,則返回-1。 (2)int read (char b), 從輸入流讀取長度為 b.length 的字符數據,寫入到字符數組 b,并返回實際所讀取的字符數。 (3)int read (char b,
8、 int off, int len),從數據流中讀取長度為 len 的字符數據,寫入到字符數組 b 中從下標 off 開始的數組元素中,并返回實際讀取的字符數。 n對于輸入流,另外還有一個常用的方法: long skip (long n),從輸入流的當前讀位置起向前移動 n 個字節/字符,并返回實際跳過的字節/字符數。9.1.2 流對象n 3 輸出流的常用方法nFileOutputStream類包含下面用于輸出字節和字節數組的方法: (1)void write (int c), 輸出一個字節。 (2)void write (byte b), 輸出存于字節數組 b 中的字節數據。 (3) voi
9、d write (byte b, int off, int len), 輸出字節數組 b 中從下標 off 開始的多至 len 個字節。 nFileWriter類也包含用于輸出字符和字符數組的方法: (1)void write (int c), 輸出一個字符。 (2)void write (char b), 輸出存于字符數組 b 中的字符數據。 (3)void write (char b, int off, int len), 輸出字符數組 b 中人下標 off 開始的多至 len 個字符。 9.1.2 流對象n 3 輸出流的常用方法n 對于輸出流,另外還有一個常用方法: void flush
10、(),刷空輸出流,并且輸出所有存儲在緩沖區的內容。n 流使用結束后,關閉流并且釋放與該流相關的資源用方法 close()。為了程序安全,也為了提高計算機的資源利用率。流使用結束后,程序應及時關閉它。n 注意:課本P176-177有錯誤。n 示例: P177 例9.1 9.1.2 流對象n程序如果要按行輸入輸出,需采用緩沖式輸入輸出方式。 采用緩沖式輸入時,對于程序的輸入請求,系統一次性輸入足夠多的內容放在內存緩沖區中。待緩沖區內容用完,再一次性輸入足夠多的數據。 n采用緩沖式輸入,只要先創建FileReader 對象,再利用 FileReader 對象創建 BufferedReader 對象,
11、即:將FileReader 對象接到 BufferedReader 對象上。【即:在原有輸入FileReader上加了工具類】n如以下代碼所示: file = new FileReader (“abc.txt”);/創建 fileReader 對象 in = new BufferedReader (file);/接到 BufferedReader類對象上 in.readLine(); n示例:P178 例9.29.2.1 緩沖式輸入n系統先將內容暫存于緩沖區,待緩沖區滿或輸出結束,才將暫存于緩沖區中的內容輸出到流的目的地。 nBufferedWriter 類是提供緩沖式輸出的類。 程序只要先創
12、建 Fileriter 對象,再用 FileWriter 對象創建BufferedWriter 對象,習慣稱為 FileWriter 對象接到 BufferedWriter 對象上。n對 BufferedWriter 對象使用 write()方法就能實現緩沖式輸出。采用緩沖式輸出時,write()方法只是將字符串寫入到系統內設的緩沖區,等緩沖區滿后,系統自動將緩沖區中內容寫入到文件。n如果想立即寫入到文件,則需要調用flush()方法。n示例:P179 例9.3 【注意緩沖輸出時,無需使用循環語句】9.2.2 緩沖式輸出n在某些應用中,不希望順序讀寫流。 例如,跳過部分不需要的數據,去讀更后面
13、的數據;或者對早先讀過的數據要重新讀入等。n文件隨機訪問可利用RandomAccessFile類實現,RandomAccessFile類創建的流既可以隨機輸出,也可以隨機輸入。 n RandomAccessFile 類構造方法 RandomAccessFile (String name, String mode) RandomAccessFile (File file, String mode)。 參數 mode 取值:“r”(只讀)或 “rw”(可讀寫)。 構造方法可能產生FileNotFoundException 異常。對流進行讀寫操作時,還應該捕獲 IOException 異常。9.3
14、隨機訪問n RandomAcessFile 類讀寫文件的方法 (1)int read(), 讀取一個字節,當前讀位置往前移動個二進制位。 (2)int read (byte b), 把文件中的數據讀到一個字節數組 (3)int read (byte b, int offset, int length), 從文件中讀取 length 個字節,把讀入的字節存到數組 b, 存儲從偏移量為 offset 的位置開始;當前讀位置也往前移動。 (4)String readLine(), 讀取文件中的一行字節,遇到換行,結束一次讀入過程。 (5)String readUTF(), 從一個 UTF 格式的文件
15、中讀取一個字符串。 (6)boolean readBoolean(), 讀取一個布爾值。 (7)byte readByte(), 讀取一個字節。 (8)short readShort(), 讀取一個 short 型整數9.3 隨機訪問n RandomAcessFile 類讀寫文件的方法 (9)long readLong(),讀取一個 long 型整數。 (10)char readChar(),讀取一個字符。 (11)int readInt(),讀取一個整數。 (12)void writeBoolean (boolean v),寫一個布爾值。 (13) void writeByte(int v)
16、,寫一個字節。 (14) void writeShort(int v),寫一個 short 型整數。 (15) void writeChar(int v),寫一個字符。 (16) void writeInt(int v),寫一個型整數。 9.3 隨機訪問n RandomAcessFile 類讀寫文件的方法 (17) void writeLong(long v),寫一個 long 型整數。 (18) void writeFloat(float v),寫一個浮點數。 (19) void writeDouble(double v),寫一個雙精度浮點數。 (20) void writeBytes(St
17、ring v),寫一個字符串作為字符序列,寫這個字符串。 (21) void writeChars(String v),寫一個字符串作為字符序列,寫這個字符串。 (22) void seek(long offset),移動當前讀寫位置距文件開始 offset 位置。 示例:P181 例9.4(注意其編程技巧)9.3 隨機訪問n 大多數應用程序要使用文件,或讀取文件的內容,或將數據保存于文件中,其中文件可通過文件對話框指定。n 可以用 javax.swing 包中的類JFileChooser實現打開和保存文件對話框。 n JFileChooser類的構造方法 (1) JFileChooser (
18、 ),建立一個 JFileChooser 對象,默認的文件對話框路徑是用戶的 Home 目錄。 (2) JFileChooser (String currentDirectoryPath), 建立一個 JFileChooser 對象,并設置文件對話框的打開路徑。9.4 文件對話框n JFileChooser 類的其他常用方法 (1) showOpenDialog(),打開“打開文件對話框”。 (2) showSaveDialog(),打開“保存文件對話框”。 n文件對話框打開后,在用戶按下按鈕或關閉對話框時,上述兩個方法會返回一個整數值,這個整數值是以下三個之一: JFileChooser.C
19、ANCEL_OPTION, 用戶按下“撤銷”按鈕。 JFileChooser.APPROVE_OPTION, 用戶按下“打開/保存”按鈕。 JFileChooser.ERROR_OPTION, 有錯,或是對話框非正常關閉。 n當程序發現用戶選擇了文件并按下了“打開/保存”按鈕后,程序就可以利用getSelectedFile()方法取得文件對象,并利用這個文件對象用方法getName()取得文件的名稱,用方法getPath()取得文件的路徑。9.4 文件對話框n 設置篩選條件 n在打開文件對話框中,還可以設置篩選條件,即指定文件的類型。n使用 FileFilter 類,該類預設兩個方法,分別是a
20、ccept(File f),與 getDescription()。 當目錄中的文件與篩選條件相符時,方法 accept()返回 true,并將此文件名顯示在對話框中。 而 getDescription()方法則是對篩選條件的描述,由程序指定,例如,“*.java”等。 n由于 FileFilter 類是一個抽象類,程序要設置打開文件對話框的文件篩選條件,就應該繼承這個類,編寫一個實現類,實現上述兩個方法。然后,就可以使用JFileChooser 類 addChoosableFileFilter()方法,或者是 setFileFilter()方法設置篩選條件。n示例:P183 例9.6(注意Filter的實現和使用方法)9.4 文件對話框【真題練習】為16位Unicode字符流提供讀和寫操作支持的類分別是()AFileInputStream類和File
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年職業規劃師資格考試試卷及答案
- 2025年行業發展趨勢與政策分析考試題及答案
- 2025年人口與發展研究生入學考試試卷及答案
- 2025年區域經濟與發展戰略分析試卷及答案
- 2025年企業稅務籌劃考試試卷及答案
- 2025年建筑安全與質量管理考試試題及答案
- 2025年廣告設計師職業資格考試卷及答案
- 2025年中國立式移動冰箱行業市場全景分析及前景機遇研判報告
- 2024年度浙江省護師類之主管護師通關考試題庫帶答案解析
- 中醫護理在疼痛中的應用
- 變電站電氣設備管理制度
- 2025年四川省內江市中考數學試題【含答案解析】
- 外研社版小學英語(三起)四年級下冊單詞默寫表
- 2025年瀘州市中考數學試卷真題(含答案解析)
- 河南省豫地科技集團有限公司招聘筆試真題2024
- 2025年安徽省醫師考核管理試題
- 胃管護理操作規范與管理要點
- JG/T 446-2014建筑用蓄光型發光涂料
- 人文關懷在護理工作中的意義
- 江蘇省2025年中職職教高考文化統考數學試題答案
- 國有資產管理清查報告編寫指南
評論
0/150
提交評論