第九章輸入輸出系統(tǒng)_第1頁
第九章輸入輸出系統(tǒng)_第2頁
第九章輸入輸出系統(tǒng)_第3頁
第九章輸入輸出系統(tǒng)_第4頁
第九章輸入輸出系統(tǒng)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第九章 輸入輸出系統(tǒng)教案名稱:教案大?。航贪割愋停篧ORD文檔星級評定:教案簡介:Java中的輸入輸出處理是通過使用流技術,用統(tǒng)一的接口表示而實現(xiàn)的。輸入輸出流中,最常見的是對文件的處理。Java語言中提供專門處理文件和目錄的類,例如:java.io.File,java.io.FileInputStream,java.io.FileOutputStream,java.io.RandomAccessFile和接口java.io.FilenameFilter。輸入輸出流根據(jù)處理的內容,分為字符流和字節(jié)流兩種,其中字節(jié)流是以byte為基本處理單位的流;而字符流是以16位的Unicode碼為處理單位的

2、流。下載一【課前思考】1 字節(jié)流和字符流的基類各是什么?2 什么是對象的串行化?對象串行化的作用是什么?【學習目標】本講主要講述了java語言中的輸入/輸出的處理,通過本講的學習,同學們可以編寫更為完善的java程序。【學習指南】仔細閱讀本章各知識點的內容, 深刻理解 java 語言中輸入/輸出流的概念,掌握處理問題的方法,多練習,多上機。【難 重 點】 重點:1遇到實際問題時,要根據(jù)需要正確使用各種輸入輸出流,特別是對中文使用適當?shù)淖址斎肓鳌?正確使用對象串行化的方法。難點:1處理字符流時,其構造方法的參數(shù)是一個字節(jié)流。2對象串行化的概念。【知 識 點】 91 I/O 流概述911 I/O

3、流的層次912 InputStream 和OutputStream913 I/O中的異常 92 文件處理921 文件描述922 文件的順序處理923 隨機訪問文件 93 過濾流931 幾種常見的過濾流 94 字符流的處理941 Reader和Writer942 InputStreamReader和OutputStreamWriter943 BufferedReader和BufferedWriter 95 對象的串行化951 串行化的定義952 串行化方法953 串行化的注意事項第九章 輸入輸出系統(tǒng)91 I/O 流概述輸入/輸出處理是程序設計中非常重要的一部分,比如從鍵盤讀取數(shù)據(jù)、從文件中讀取數(shù)

4、據(jù)或向文件中寫數(shù)據(jù)等等。Java把這些不同類型的輸入、輸出源抽象為流(stream),用統(tǒng)一接口來表示,從而使程序簡單明了。Jdk 提供了包java.io,其中包括一系列的類來實現(xiàn)輸入/輸出處理。下面我們對java.io包的內容進行概要的介紹。911 I/O流的層次1字節(jié)流2字符流3對象流4其它1字節(jié)流:從InputStream和OutputStream派生出來的一系列類。這類流以字節(jié)(byte)為基本處理單位。 InputStream、OutputStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStrea

5、m ByteArrayInputStream、ByteArrayOutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream2字符流:從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。 Reader、Writer InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReade

6、r、CharArrayWriter PipedReader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter3對象流 ObjectInputStream、ObjectOutputStream4其它 文件處理:File、RandomAccessFile; 接口DataInput、DataOutput、ObjectInput、ObjectOutput;912 InputStream 和OutputStream1 InputStream2 OutputStream

7、1InputStream 從流中讀取數(shù)據(jù):int read( ); /讀取一個字節(jié),返回值為所讀的字節(jié)int read( byte b ); /讀取多個字節(jié),放置到字節(jié)數(shù)組b中,通常 /讀取的字節(jié)數(shù)量為b的長度,返回值為實際 /讀取的字節(jié)的數(shù)量int read( byte b , int off, int len ); /讀取len個字節(jié),放置到以下標off開始/數(shù)組b中,返回值為實際讀取的字節(jié)的數(shù)量int available( ); /返回值為流中尚未讀取的字節(jié)的數(shù)量long skip( long n ); /讀指針跳過n個字節(jié)不讀,返回值為實際/跳過的字節(jié)數(shù)量 關閉流:close( );

8、/流操作完畢后必須關閉 使用輸入流中的標記:void mark( int readlimit ); /記錄當前讀指針所在位置,readlimit表示讀指針/讀出readlimit個字節(jié)后所標記的指針位置才失效void reset( ); /把讀指針重新指向用mark方法所記錄的位置boolean markSupported( );/當前的流是否支持讀指針的記錄功能有關每個方法的使用,詳見java API。2OutputStream 輸出數(shù)據(jù):void write( int b ); /往流中寫一個字節(jié)bvoid write( byte b ); /往流中寫一個字節(jié)數(shù)組bvoid write(

9、byte b , int off, int len ); /把字節(jié)數(shù)組b中從/下標off開始,長度為len的字節(jié)寫入流中 flush( ) /刷空輸出流,并輸出所有被緩存的字節(jié)由于某些流支持緩存功能,該方法將把緩存中所有內容強制輸出到流中。 關閉流: close( ); /流操作完畢后必須關閉913 I/O中的異常進行I/O操作時可能會產(chǎn)生I/O異常,屬于非運行時異常,應該在程序中處理。如:FileNotFoundException, EOFException, IOException92 文件處理I/O處理中,最常見的是對文件的操作,java.io包中有關文件處理的類有:File、FileI

10、nputStream、FileOutputStream、RamdomAccessFile和FileDescriptor;接口有:FilenameFilter。 921 文件描述類File提供了一種與機器無關的方式來描述一個文件對象的屬性。下面我們介紹類File中提供的各種方法。 文件或目錄的生成public File(String path);/*如果path是實際存在的路徑,則該File對象表示的是目錄;如果path是文件名,則該File對象表示的是文件。*/public File(String path,String name);/path是路徑名,name是文件名public File(

11、File dir,String name);/dir是路徑名,name是文件名 文件名的處理String getName( ); /得到一個文件的名稱(不包括路徑)String getPath( ); /得到一個文件的路徑名String getAbsolutePath( );/得到一個文件的絕對路徑名String getParent( ); /得到一個文件的上一級目錄名String renameTo(File newName); /將當前文件名更名為給定文件的完整路徑 文件屬性測試boolean exists( ); /測試當前File對象所指示的文件是否存在boolean canWrite(

12、 );/測試當前文件是否可寫boolean canRead( );/測試當前文件是否可讀boolean isFile( ); /測試當前文件是否是文件(不是目錄)boolean isDirectory( ); /測試當前文件是否是目錄 普通文件信息和工具long lastModified( );/得到文件最近一次修改的時間long length( ); /得到文件的長度,以字節(jié)為單位boolean delete( ); /刪除當前文件 目錄操作boolean mkdir( ); /根據(jù)當前對象生成一個由該對象指定的路徑String list( ); /列出當前目錄下的文件【例9-1】impor

13、t java.io.*; /引入java.io包中所有的類public class FileFilterTestpublic static void main(String args)File dir=new File(d:/ex); /用File 對象表示一個目錄Filter filter=new Filter(java); /生成一個名為java的過濾器System.out.println(list java files in directory +dir);String files=dir.list(filter); /列出目錄dir下,文件后綴名 為java的所有文件for(int i

14、=0;ijava NumberInput123Input value is 123Input value changed after doubled: 246注意:在讀取字符流時,如果不是來自于本地的,比如說來自于網(wǎng)絡上某處的與本地編碼方式不同的機器,那么我們在構造輸入流時就不能簡單地使用本地缺省的編碼方式,否則讀出的字符就不正確;為了正確地讀出異種機上的字符,我們應該使用下述方式構造輸入流對象:ir = new InputStreamReader(is, 8859_1);采用ISO 8859_1編碼方式,這是一種映射到ASCII碼的編碼方式,可以在不同平臺之間正確轉換字符。95 對象的串行化

15、(Serialization)951 串行化的定義1 什么是串行化對象的壽命通常隨著生成該對象的程序的終止而終止。有時候,可能需要將對象的狀態(tài)保存下來,在需要時再將對象恢復。我們把對象的這種能記錄自己的狀態(tài)以便將來再生的能力,叫做對象的持續(xù)性(persistence)。對象通過寫出描述自己狀態(tài)的數(shù)值來記錄自己,這個過程叫對象的串行化(Serialization)。2 串行化的目的串行化的目的是為java的運行環(huán)境提供一組特性,其主要任務是寫出對象實例變量的數(shù)值。952 串行化方法在java.io包中,接口Serializable用來作為實現(xiàn)對象串行化的工具,只有實現(xiàn)了Serializable的

16、類的對象才可以被串行化。1 定義一個可串行化對象public class Student implements Serializableint id; /學號String name; /姓名int age; /年齡String department /系別public Student(int id,String name,int age,String department)this.id = id; = name;this.age = age;this.department = department;2 構造對象的輸入/輸出流要串行化一個對象,必須與一定的對象輸入/輸出流聯(lián)系

17、起來,通過對象輸出流將對象狀態(tài)保存下來,再通過對象輸入流將對象狀態(tài)恢復。java.io包中,提供了ObjectInputStream和ObjectOutputStream將數(shù)據(jù)流功能擴展至可讀寫對象。在ObjectInputStream中用readObject()方法可以直接讀取一個對象,ObjectOutputStream中用writeObject()方法可以直接將對象保存到輸出流中。Student stu=new Student(,Liu Ming,18, CSD);FileOutputStream fo=new FileOutputStream(data.ser);/保存對象的狀態(tài)Obj

18、ectOutputStream so=new ObjectOutputStream(fo);tryso.writeObject(stu);so.close(); catch(IOException e )System.out.println(e);FileInputStream fi=new FileInputStream(data.ser);ObjectInputStream si=new ObjectInputStream(fi);/恢復對象的狀態(tài)trystu=(Student)si.readObject();si.close(); catch(IOException e )System.out.println(e);在這個例子中,我們首先定義一個類Student,實現(xiàn)了 Serializable接口,然后通過對象輸出流的writeObject()方法將Student對象保存到文件data.ser中。之后,通過對象輸入流的readObject()方法從文件data.ser中讀出保存下來的Student對象。953 串行化的注意事項1串行化能保存的元素只能保存對象的非靜態(tài)成員變量,不能保存任何的成員方法和靜態(tài)的成員

溫馨提示

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

最新文檔

評論

0/150

提交評論