javase零基礎及源代碼課件13io_第1頁
javase零基礎及源代碼課件13io_第2頁
javase零基礎及源代碼課件13io_第3頁
javase零基礎及源代碼課件13io_第4頁
javase零基礎及源代碼課件13io_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java流本節(jié)主要內容流的概述流的分類InputStream/OutputStreamReader/Writer流的幾種典型流向RandomAccessFile的用法I/O流概述為進行數據的輸入/輸出操作,Java中把不同的輸入/輸出源(鍵盤、文件、網絡連接等)抽象表述為“流”(stream)。Stream是從起源(source)到接收(sink)的有序數據java.io包中定義了多個流類型(類或抽象類)來實現輸入/輸出功能。按照流的方向分兩種基本的流:輸入流和輸出流輸入流 :只能從中讀取數據,而不能向其寫出數據輸出流 :只能向其寫入數據,而不能從中讀取數據按照流所處理的數據類型劃分,可以分為

2、:字節(jié)流:用于處理字節(jié)數據(8個bit) 包括InputStream/OutputStream。字符流:用于處理Unicode字符數據(16個bit)。 包括Writer/Reader節(jié)點流和處理流按照流的角色劃分,分為節(jié)點流和處理流可以從/向一個特定的IO設備(如磁盤、網絡)讀/寫數據的流,稱為節(jié)點流。節(jié)點流也被稱為低級流。例如:InputStream和Reader的子類都有read()的方法,OutputStream和Writer的子類都有write()的方法,用于讀取/寫入一個字節(jié)或字節(jié)數組.但是在實際使用中很少使用單一流類產生的輸入/輸出流.而是使用這兩個方法給其他的流類提供數據數據源

3、程序數據源程序 實現對一個已存在的流的連接和封裝,通過所封裝的流的功能調用 實現數據讀/寫功能的流,稱為處理流。處理流也被稱為高級流。InputStream/OutputStreamInputStream/OutputStream用于處理字節(jié)數據。它們讀/寫流的方式都是以字節(jié)為單位進行的。InputStream基本方法三個基本的read方法:int read():讀取一個字節(jié),并將它返回。int read(byte buffer):將數據讀入一個字節(jié)數組,同時返回讀取的字節(jié)數。int read(byte buffer, int offset, int length):將數據讀入一個字節(jié)數組,放

4、到數組的offset指定的位置開始,并用length來指定讀取的最大字節(jié)數。 注意:以上三個方法在讀取到文件末尾時,都返回-1.可以用來判斷是否全部讀取文件 其它方法:void close():關閉流。int available():返回可以從中讀取的字節(jié)數。long skip(long n):在輸入流中跳過n個字節(jié),將實際跳過的字節(jié)數返回。boolean markSupported():判斷流是否支持標記功能。void mark(int readlimit):在支持標記的輸入流的當前位置設置一個標記。void reset():返回到流的上一個標記。注意必須流支持標記功能。常見InputStr

5、eam類低級InputStream類(節(jié)點流):InputStream:所有字節(jié)流的超類,定義了很多用于處理輸入流的方法,是個抽象類ByteArrayInputStream:為讀取字節(jié)數組設計的流,用于從文件中讀取二進制數據PipedInputStream:管道流,FileInputStream:用于讀取文件中的信息FilterInputStream:繼承自InputStream,能將一個流連接到另一個流的末端,將兩個流連接起來高級InputStream類(處理流):DataInputStream:可以從低級流中讀取簡單數據和String類型的數據.這樣,可以將底層的讀取細節(jié)隱藏起來,而直接處

6、理簡單類型和String類型的數據BufferedInputStream:提供緩沖能力的字節(jié)輸入流InputStream類層次InputStreamFileInputStreamStringBufferInputStreamByteArrayInputStream節(jié)點流處理流ObjectInputStreamPipedInputStreamSequenceInputStreamFilterInputStreamDataInputStreamPushbackInputStreamBufferedInputStreamLineNumberInputStreamInputStream例子(示例10-

7、1)byte buff = new byte1024; int n; FileInputStream fis = null; try fis = new FileInputStream(“C:a.txt”); while(n = fis.read(buff)!=-1) System.out.write(buff, 0, n); catch (FileNotFoundException e) System.out.println(沒有找到文件); System.exit(1); OutputStream基本方法三個基本的write方法:void write(int c)void write(by

8、te buffer)void write(byte buffer, int offset, int length) 其它方法void close()void flush():將緩沖中的字節(jié)發(fā)送到流中,同時清空緩沖區(qū)OutputStream類低級OutputStream,用來向設備中寫入字節(jié)流OutputStream:所有字節(jié)輸出流的基類ByteArrayOutputStream :按字節(jié)數組方式向設備中寫入字節(jié)流的類PipedOutputStream:管道輸出流高級OutputStreamDataOutputStream:可以向低級流中寫入簡單數據和String類型的數據.這樣,可以將底層的寫

9、入細節(jié)隱藏起來,而直接處理簡單類型和String類型的數據BufferedOutputStream:提供緩沖能力的字節(jié)輸出流OutputStream類層次OutputStreamFileOutputStreamFilterInputStreamByteArrayOutputStreamPipedOutputStream節(jié)點流處理流ObjectOutputStreamDataOutputStreamPrintStreamBufferedOutputStreamOutputStream例子(示例10-2)FileOutputStream out; /聲明一個Print Stream流PrintSt

10、ream p; try out = new FileOutputStream(myfile.txt);p = new PrintStream( out );p.println (面朝大海,春暖花開);p.close(); catch (Exception e) System.err.println (Error writing to file);通過Stream拷貝文本文件例子(示例10-3)通過FileInputStream和FileOutputStream,實現從一個文本文件拷貝內容到另一個文件的例子通過FileInputStream從源文本文件中讀出數據,然后通過FileOutputSt

11、ream寫入到另外一個文本文件中。使用高級流(BufferedInputStream/BufferedOutputStream) 對低級流進行包裝 遞歸統(tǒng)計文件個數public static int fileTest(String pathName,int iCount) File file = new File(pathName);if (file.isDirectory() System.out.println(pathName + 是一個路徑); File files = file.listFiles(); if (files != null) for (File f : files)

12、if (f.isDirectory() String path = f.getAbsolutePath();iCount = fileTest(path,iCount); else if (f.getName().endsWith(.java) iCount+; else System.out.println(= + pathName + 是一個文件); return iCount;Reader/WriterReader/Writer處理的是字符類型的數據。它處理流的方式是以字符為單位進行的。Reader/Writer和InputStream/OutputStream一樣,也分為節(jié)點流(低級流

13、)和處理流(高級流)。Reader和InputStream一樣,用于從流中讀取數據。它和InputStream的區(qū)別在于,InputStream以字節(jié)為單位操作流,而Reader以字符為單位操作流。Reader常用方法讀取方法:int read():用于從流中讀出一個字符,并將它返回。int read(char buffer):將從流中讀出的字符放到字符數組buffer中,返回讀出的字符數。int read(char buffer,int offset,int length):將讀出的字符放到字符數組的指定offset開始的空間,每次最多讀出length個字符。其他方法:void close(

14、):關閉Reader流。boolean ready():判斷流是否已經準備好被讀取。skip(long n):跳過指定的n個字符。boolean markSupported():和InputStream中的markSupported方法類似。void mark(int readAheadLimit):和InputStream中的mark方法類似。void reset():和InputStream中的reset方法類似。Reader相關類低級Reader類:CharArrayReader:StringReaderPipedReaderFileReader高級Reader類BufferedRead

15、erInputStreamReaderLineNumberReaderReader類層次ReaderBufferedReaderStringReaderCharArrayReaderInputStreamReaderPipedReaderFilterReaderFileReaderPushbackReaderLineNumberReader節(jié)點流處理流Reader例子(示例10-4)FileReader fr = new FileReader(C:/nos/tmp/mydata.txt);BufferedReader br = new BufferedReader(fr);String rec

16、ord = new String();while (record = br.readLine() != null) recCount+;System.out.println(Line + recCount + : + record); InputStreamReaderInputStreamReader能將字節(jié)流轉換為一個Reader,即能將字節(jié)流轉換為字符流 public static void readRile() try InputStreamReader isr = new InputStreamReader(new FileInputStream(c:a.txt);BufferedR

17、eader bufferedReader = new BufferedReader(isr) String str = ;while (str =bufferedReader.readLine() ) != null)System.out.println(str); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();CharArrayReader從內存的字符串數組中讀取字符,它的數據源是一個字符數組,它把字符數組類型轉換為Reader類型: public

18、static void readRile() char arrays = a,你,好,啊,t;CharArrayReader reader = new CharArrayReader(arrays);int i = 0;try while ( (i = reader.read() != -1)System.out.print(char)i); catch (IOException e) / TODO 自動生成 catch 塊e.printStackTrace(); reader.close();StringReader把String類型轉換為Reader類型 public static voi

19、d readRile() String str = “經費來的快速家法律監(jiān)督是分機離開收到n將發(fā)了開 賽發(fā)了看見的說n發(fā)覺臉上開發(fā)介紹兩分巨大勝利n;StringReader reader = new StringReader(str);int i = 0;try while( (i= reader.read() ) != -1) System.out.print(char)i); catch (IOException e) e.printStackTrace(); reader.close();Writer常用方法寫入方法:void write(int c):將參數c的低16位組成字符寫入到

20、流中。void write(char buffer):將字符數組buffer中的字符寫入到流中。void write(char buffer, int offset, int length):將字符數組buffer中從offset開始的length個字符寫入到流中。void write(String string):將string字符串寫入到流中。void write(String string, int offset, int length):將字符string中從offset開始的length個字符寫入到流中。其他方法:void close():和OutputStream的close方法類

21、似。void flush():和OutputStream的flush方法類似。Writer相關類低級Writer類:CharArrayWriterStringWriterPipedWriterFileWriter高級Writer類:BufferedWriterOutputStreamWriterPrintWriter:將流轉換為文本Writer類層次WriterStringWriterCharArrayWriterPipedWriterOutputStreamWriterFileWriter節(jié)點流處理流FilterWriterBufferedWriterPrintWriterWriter例子(示例10-5)try FileWriter fw = new FileWriter(mydata.

溫馨提示

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

評論

0/150

提交評論