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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

13、t java.io.*; /引入java.io包中所有的類(lèi)public class FileFilterTestpublic static void main(String args)File dir=new File(d:/ex); /用File 對(duì)象表示一個(gè)目錄Filter filter=new Filter(java); /生成一個(gè)名為java的過(guò)濾器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注意:在讀取字符流時(shí),如果不是來(lái)自于本地的,比如說(shuō)來(lái)自于網(wǎng)絡(luò)上某處的與本地編碼方式不同的機(jī)器,那么我們?cè)跇?gòu)造輸入流時(shí)就不能簡(jiǎn)單地使用本地缺省的編碼方式,否則讀出的字符就不正確;為了正確地讀出異種機(jī)上的字符,我們應(yīng)該使用下述方式構(gòu)造輸入流對(duì)象:ir = new InputStreamReader(is, 8859_1);采用ISO 8859_1編碼方式,這是一種映射到ASCII碼的編碼方式,可以在不同平臺(tái)之間正確轉(zhuǎn)換字符。95 對(duì)象的串行化

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

16、類(lèi)的對(duì)象才可以被串行化。1 定義一個(gè)可串行化對(duì)象public class Student implements Serializableint id; /學(xué)號(hào)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 構(gòu)造對(duì)象的輸入/輸出流要串行化一個(gè)對(duì)象,必須與一定的對(duì)象輸入/輸出流聯(lián)系

17、起來(lái),通過(guò)對(duì)象輸出流將對(duì)象狀態(tài)保存下來(lái),再通過(guò)對(duì)象輸入流將對(duì)象狀態(tài)恢復(fù)。java.io包中,提供了ObjectInputStream和ObjectOutputStream將數(shù)據(jù)流功能擴(kuò)展至可讀寫(xiě)對(duì)象。在ObjectInputStream中用readObject()方法可以直接讀取一個(gè)對(duì)象,ObjectOutputStream中用writeObject()方法可以直接將對(duì)象保存到輸出流中。Student stu=new Student(,Liu Ming,18, CSD);FileOutputStream fo=new FileOutputStream(data.ser);/保存對(duì)象的狀態(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);/恢復(fù)對(duì)象的狀態(tài)trystu=(Student)si.readObject();si.close(); catch(IOException e )System.out.println(e);在這個(gè)例子中,我們首先定義一個(gè)類(lèi)Student,實(shí)現(xiàn)了 Serializable接口,然后通過(guò)對(duì)象輸出流的writeObject()方法將Student對(duì)象保存到文件data.ser中。之后,通過(guò)對(duì)象輸入流的readObject()方法從文件data.ser中讀出保存下來(lái)的Student對(duì)象。953 串行化的注意事項(xiàng)1串行化能保存的元素只能保存對(duì)象的非靜態(tài)成員變量,不能保存任何的成員方法和靜態(tài)的成員

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論