輸入輸出處理(第8章).ppt
《輸入輸出處理(第8章).ppt》由會員分享,可在線閱讀,更多相關《輸入輸出處理(第8章).ppt(49頁珍藏版)》請在裝配圖網(wǎng)上搜索。
主要內(nèi)容 9 1I O流的概念和劃分9 2文件的操作9 3字節(jié)流處理9 4字符流處理9 5串行化 9 1I O流的概念和劃分 數(shù)據(jù)流 Stream 是一組有順序的 有起點和終點的字節(jié)集合 是對輸入和輸出的總稱和抽象 Java程序通過流來完成輸入 輸出 流通過Java的輸入 輸出系統(tǒng)與物理設備鏈接 思考 數(shù)據(jù)流會帶來哪些好處 Java流的劃分 字節(jié)流類處理字節(jié)的輸入和輸出提供了方便的方法字符流類為字符的輸入和輸出處理提供了方便讀寫數(shù)據(jù)的單位不同最主要的是Read 和Write 方法每個流的特點 字節(jié)流輸入類 字節(jié)輸出類 字符輸入流類 字符輸出流 主要內(nèi)容 9 1I O流的概念和劃分9 2文件的操作9 3字節(jié)流處理9 4字符流處理9 5串行化 7 2文件的操作 File類 對文件的引用和表示File類提供了一些方法來操縱文件和獲取文件的信息 對于目錄 Java把它當作一種特殊類型的文件 即文件名單列表 File類直接處理文件和文件系統(tǒng) 通過File類的方法 可以得到文件或者目錄的描述信息 包括名稱 所在路徑 讀寫性 長度等 還可以創(chuàng)建目錄 創(chuàng)建文件 改變文件名 刪除文件 列出目錄中的文件等 File對象的構(gòu)造 File Stringpath File Stringdir Stringfilename File Filedir Stringfilename File URIuri Filef1 newFile D Java Filef2 newFile D Java test txt Filef3 newFile f1 test txt Filef4 newFile file D Java test txt File類的方法 booleancanRead 測試文件是否可讀booleancreateNewFile 創(chuàng)建新文件booleandelete 刪除文件FilegetAbsoluteFile 返回絕對文件名booleanisDirectory 是否是目錄longlastModified 上次修改時間 從1970年1月1號開始的標準時間 UTC 的毫秒數(shù)具體見程序例子 File的使用FileDemo java 目錄的操作 目錄是一個包含其他文件和路徑列表的File類 當你創(chuàng)建一個File對象且它是目錄時 isDirectory 方法返回ture String list 文件列表在一個String對象數(shù)組中返回 File listFiles 文件列表在一個File對象的數(shù)組中返回 過濾文件 我們有時需要列出目錄下指定類型的文件 比如 java class等擴展名的文件 可以使用File類的下述三個方法 列出指定類型的文件 String list FilenameFilterFFObj File listFiles FilenameFilterFFObj File listFiles FileFilterFObj 過濾接口 FilenameFilter僅定義了一個方法 accept 調(diào)用list方法列出文件時 將調(diào)用accept 方法檢查該文件name是否符合accept方法指定的名字要求 它的通常形式如下 booleanaccept Filedirectory Stringfilename FileFilter只定義了一個accept 方法 該方法被列表中的每個文件調(diào)用一次 它的通常形式如下 booleanaccept Filepath 參考例子DirDemo java 主要內(nèi)容 9 1I O流的概念和劃分9 2文件的操作9 3字節(jié)流處理9 4字符流處理9 5串行化 9 3字節(jié)流處理 InputStream OutputStream標準輸入 出流文件字節(jié)流過濾流隨機存取文件其它字節(jié)流 9 3 1InputStream intread intread byteb intread byteb intoffset intlen intavailable voidclose voidmark intreadlimit booleanmarkSupported voidreset longskip longn OutputStream voidclose voidflush voidwrite intb voidwrite byteb voidwrite byteb intoffset intlen 9 3 2標準輸入 出流 Java通過系統(tǒng)類System實現(xiàn)標準輸入輸出的功能 定義了3個流變量 in out和err staticPrintStreamerrstaticInputStreaminstaticPrintStreamout通過read 方法從鍵盤接受數(shù)據(jù) 見程序StdInput java 標準輸出 System out作為打印流類PrintStream的對象out實現(xiàn)標準輸出 其中定義了Print和Println方法 支持Java任意基本類型作為參數(shù) Java5 0對PrintStream類進行了擴充 支持數(shù)據(jù)的格式化輸出 增加了printf 方法 publicPrintStreamprintf Stringformat Object args publicPrintStreamprintf Localel Stringformat Object args 從標準輸入讀取正數(shù) JDK5 0新功能importjava util Scanner publicclassTestScanner publicstaticvoidmain String args Scannercin newScanner System in inta cin nextInt b cin nextInt System out println a b 9 3 3文件字節(jié)流 InputStream和OutputStream都是抽象類 不能實例化 因此在實際應用中都使用的是他們的子類 FileInputStream和FileOutputStream用于進行文件的輸入輸出處理 其數(shù)據(jù)源和接收器都是文件 FileInputStream FileInputStream用于順序訪問本地文件 對文件進行操作 不支持mark方法和reset方法 它的兩個常用的構(gòu)造函數(shù)如下 FileInputStream Stringfilepath FileInputStream FilefileObj FileInputStreamf1 newFileInputStream Test java Filef newFile Test java FileInputStreamf2 newFileInputStream f 能引發(fā)FileNotFoundException異常 FileOutputStream FileOutputStream用于向一個文本文件寫數(shù)據(jù) 它從超類中繼承write close等方法 它常用的構(gòu)造函數(shù)如下 FileOutputStream StringfilePath FileOutputStream FilefileObj FileOutputStream StringfilePath booleanappend FileOutputStream FilefileObj booleanappend 它們可以引發(fā)IOException或SecurityException異常 FileOutputStream FileOutputStream重寫了抽象類OutputStream的寫數(shù)據(jù)的方法 publicvoidwrite byte b throwsIOExceptionpublicvoidwrite byte b intoff intlen throwsIOExceptionpublicvoidwrite intb throwsIOExceptionb是int類型時 占用4個字節(jié) 只有最低的一個字節(jié)被寫入輸出流 忽略其余字節(jié) 見程序 文件拷貝FileStreamCopy java 9 3 4過濾流 過濾流在讀 寫數(shù)據(jù)的同時可以對數(shù)據(jù)進行處理 它提供了同步機制 使得某一時刻只有一個線程可以訪問一個I O流 以防止多個線程同時對一個I O流進行操作所帶來的意想不到的結(jié)果 這些過濾字節(jié)流是FilterInputStream和FilterOutputStream 它們的構(gòu)造函數(shù)如下 FilterOutputStream OutputStreamos FilterInputStream InputStreamis 為了使用一個過濾流 必須首先把過濾流連接到某個輸入 出流上 通過在構(gòu)造方法的參數(shù)中指定所要連接的輸入 出流來實現(xiàn) BufferedInputStreamBufferedOutputStream BufferedInputStream InputStreaminput BufferedInputStream InputStreaminput intbufSize BufferedInputStream markSupported 返回true BufferedInputStream支持mark 和reset 方法 BufferedOutputStream OutputStreamoutput BufferedOutputStream OutputStreamoutput intbufSize 具體見程序BufferedStreamCopy java 9 3 5隨機存取文件 對于InputStream和OutputStream 他們都是順序訪問流 從頭至尾訪問流 并且輸入流只能讀 不能寫 輸出流只能寫 不能讀 即對一個文件不能同時進行讀寫 RandomAccessFile類提供了一種稱為 隨機訪問文件 方式 可以 對一個文件同時進行讀寫操作 可以在文件的任意位置進行讀寫操作 RandomAccessFile的使用 RandomAccessFile Stringname Stringmode throwsFileNotFoundException RandomAccessFile Filefile Stringmode throwsFileNotFoundException 其中 file識別文件路徑 mode指定參數(shù)訪問模式 r表示讀 w表示寫 rw表示讀寫 當文件不存在時 構(gòu)造方法將拋出FileNotFoundException RandomAccessFile的方法 publiclonglength 返回文件的長度voidsetLength longlen 設置文件的新長度publicvoidseek longpos 改變文件指針位置publicfinalintreadInt 讀入一個整數(shù)類型 publicfinalvoidwriteInt intv 寫一個整數(shù) publiclonggetFilePointer 獲取文件指針位置 publicintskipBytes intn 跳過n個字節(jié)close 關閉文件見程序RandomFileDemo java 9 3 6其它字節(jié)流 ByteArrayInputStreamByteArrayOutputStreamSequenceInputStreamPushbackInputStream 主要內(nèi)容 9 1I O流的概念和劃分9 2文件的操作9 3字節(jié)流處理9 4字符流處理9 5串行化 9 4字符流處理 Reader Writer文件字符流字節(jié)流和字符流的轉(zhuǎn)化 9 4 1Reader Writer Reader是定義Java的字符流輸入模式的抽象類 該類的所有方法在出錯情況下都將引發(fā)IOException異常 Writer是定義Java的字符流輸出模式的抽象類 該類的所有方法都返回一個void值 在出錯情況下都將引發(fā)IOException異常 Reader類的方法 abstractvoidclose voidmark intnumChars booleanmarkSupported intread intread charbuffer abstractintread charb intoffset intlen booleanready voidreset longskip longn Writer類的方法 abstractvoidclose abstractvoidflush voidwrite intch voidwrite charbuffer abstractvoidwrite charb intoffset intlen voidwrite Stringstr voidwrite Stringstr intoffset intlen publicWriterappend charc publicWriterappend CharSequencecsq publicWriterappend CharSequencecsq intstart intend 9 4 2文件字符流 FileReader類是一個以字符方式讀取文件內(nèi)容的Reader類的子類 FileReader StringfilePath FileReader FilefileObj FileWriter類是一個以字符方式寫文件內(nèi)容的Writer類的子類 FileWriter StringfilePath FileWriter StringfilePath booleanappend FileWriter FilefileObj 見程序FileReaderWriterDemo java 解析文本文件的數(shù)據(jù) ScannerPrintWriter ScannerPrintWriterDemo javaimportjava io File importjava io FileNotFoundException importjava io PrintWriter importjava util Scanner publicclassScannerPrintWriterDemo publicstaticvoidmain String args Scanners null PrintWriterpw null try 從源文件輸入 使用Scanner讀入由空白字符分割的文本文件內(nèi)容是很方便的s newScanner newFile source txt 使用PrintWriter進行格式化輸出pw newPrintWriter dest txt while s hasNextLine StringstrLine s nextLine 調(diào)用方法求每一行的和intsum getLineSum strLine 輸出每一行pw println strLine t sum catch FileNotFoundExceptione e printStackTrace finally 關閉輸入流和輸出流if s null s close if pw null pw close 計算每一行的和的方法privatestaticintgetLineSum StringstrLine 使用Scanner分割每一行為多個整數(shù)Scanners newScanner strLine intsum 0 while s hasNextInt sum s nextInt returnsum 9 4 3字節(jié)流向字符流的轉(zhuǎn)化 字節(jié)流和字符流是Java提供的兩種輸入輸出處理方式 字節(jié)流以單個字節(jié)為讀 寫單位 字符流以字符為讀 寫單位 一般字符由多個字節(jié)組成 InputStreamReader和OutputStreamWriter用來在字節(jié)和字符之間作為中介 可以把以字節(jié)形式表示的流轉(zhuǎn)化為特定的平臺上的字符表示 可以從一個字節(jié)流構(gòu)造一個字符流對象 我們可以在構(gòu)造這些流對象時指定字符編碼規(guī)范 也可以用當前平臺的缺省編碼規(guī)范 InputStreamReader publicInputStreamReader InputStreamin publicInputStreamReader InputStreamin StringcharsetName throwsUnsupportedEncodingExceptionpublicInputStreamReader InputStreamin Charsetcs publicInputStreamReader InputStreamin CharsetDecoderdec Filefile newFile src StreamToReaderWriter java FileInputStreamfin newFileInputStream file InputStreamReaderisr newInputStreamReader fin GBK OutputStreamWriter publicOutputStreamWriter OutputStreamout publicOutputStreamWriter OutputStreamout StringcharsetName throwsUnsupportedEncodingExceptionpublicOutputStreamWriter OutputStreamout Charsetcs publicOutputStreamWriter OutputStreamout CharsetEncoderenc FileOutputStreamfout newFileOutputStream copy of file txt OutputStreamWriterosw newOutputStreamWriter fout GBK 見程序StreamToReaderWriter java 主要內(nèi)容 9 1I O流的概念和劃分9 2文件的操作9 3字節(jié)流處理9 4字符流處理9 5串行化 9 5串行化 串行化的概念串行化的方法定制串行化 串行化的概念 對象的壽命通常隨著生成該對象的程序的終止而終止 某些時候 需要將對象的狀態(tài)保存下來 將來需要的時候可以恢復 把對象的這種能記錄自己的狀態(tài)以便將來再生的能力 叫做對象的持續(xù)性 persistence 對象通過寫出描述自己狀態(tài)的數(shù)值來記錄自己的過程 叫做對象的串行化 Serialization 串行化的主要任務是寫出對象實例變量的數(shù)值 如果變量是另一對象的一引用 則引用的對象也要串行化 這個過程是遞歸的 串行化的方法 Serializable只有實現(xiàn)Serializable接口的對象才可以被串行化工具存儲和恢復 Serializable接口沒有定義任何成員 它只用來表示一個類可以被串行化 如果一個類可以串行化 它的所有子類都可以串行化 關鍵字transient表示一個成員變量不是該對象串行化的一部分 讀 寫對象 ObjectOutputStreampublicclassObjectOutputStreamextendsOutputStreamimplementsObjectOutput ObjectStreamConstantsObjectOutputStream OutputStreamout throwsIOExceptionfinalvoidwriteObject Objectobj ObjectInputStreampublicclassObjectInputStreamextendsInputStreamimplementsObjectInput ObjectStreamConstantsObjectInputStream InputStreamin throwsIOException StreamCorruptedExceptionObjectreadObject 讀 寫對象 FileOutputStreamfout newFileOutputStream data1 ser ObjectOutputStreamoout newObjectOutputStream fout FileInputStreamfin newFileInputStream data1 ser ObjectInputStreamoin newObjectInputStream fin 見程序SerializableDemo java- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關 鍵 詞:
- 輸入輸出 處理
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。
鏈接地址:http://m.jqnhouse.com/p-5406222.html