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

下載本文檔

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

文檔簡介

1、第第7章章 java輸入與輸出輸入與輸出系統(tǒng)7.1 7.1 流流7.2 7.2 標準輸入標準輸入/ /輸出輸出 7. 3 文件訪問文件訪問 在Java語言中,輸入與輸出完全基于“流”這個概念。Java輸入輸出的流式接口為復雜而繁重的I/O編程任務提供了一個簡潔的抽象。 7.1 7.1 流流可以從不同的角度進行分類??梢詮牟煌慕嵌冗M行分類。 按流的方向不同可以分為輸入流和輸出流按流的方向不同可以分為輸入流和輸出流 按處理數(shù)據(jù)單位的不同可以分為字節(jié)流和字符流。按處理數(shù)據(jù)單位的不同可以分為字節(jié)流和字符流。 按功能的不同可以分為節(jié)點流和處理流。按功能的不同可以分為節(jié)點流和處理流。在java中,對于數(shù)

2、據(jù)的輸入輸出操作以“流”(stream)方式進行。Jdk提供了各種各樣的“流”類,用以獲取不同的數(shù)據(jù)。文件程序0100101 文件程序0100101 程序0100101 文件程序011hello木桶流字節(jié)流和字符流字節(jié)流和字符流 在Java 2中,定義了兩種類型的流:字節(jié)類和字符類字節(jié)類和字符類。 字節(jié)流字節(jié)流:為處理字節(jié)的輸入和輸出提供了方便的方法。例如,使用字節(jié)流讀取或存入二進制數(shù)據(jù)。 字符流:字符流: 為字符的輸入和輸出處理提供了方便。 字節(jié)流和字符流的區(qū)別:1、字節(jié)流讀取的時候,讀到一個字節(jié)就返回一個字節(jié); 字符流使用了字節(jié)流讀到一個或多個字節(jié),先去查指定的編碼表,將查到字符返回。2、

3、字節(jié)流可以處理所有類型的數(shù)據(jù),如圖片,音頻數(shù)據(jù)、視頻數(shù)據(jù);字符流只能處理字符數(shù)據(jù)?!局灰翘幚砑兾谋緮?shù)據(jù),就要優(yōu)先考慮使用字符流。除此之外都應該使用字節(jié)流。】節(jié)點流和處理流節(jié)點流節(jié)點流為可以從一個特定的數(shù)據(jù)源(節(jié)點)讀寫數(shù)據(jù)(文件,內存)數(shù)據(jù)源程序節(jié)點流數(shù)據(jù)源程序處理流處理流處理流是“連接”在已存在的流之上,通過對數(shù)據(jù)的處理為程序提供更強大的讀寫功能。 字節(jié)流由兩個類層次結構定義。在頂層有兩個抽象類:InputStream 和 OutputStream。每個抽象類都有多個具體的子類,這些子類對不同的外設進行處理,例如磁盤文件、網絡連接、甚至是內存緩沖區(qū)。 1字節(jié)流類字節(jié)流類 字符流類由兩個類層

4、次結構定義。頂層有兩個抽象類:Reader和Writer。這些抽象類處理統(tǒng)一編碼的字符流。 。2字符流類字符流類深色為節(jié)點流,淺色為處理流。深色為節(jié)點流,淺色為處理流。Java中基本流類有4 個,其它類都為這4個類的派生子類。 基于字符的基本類:Reader 、Writer 基于字節(jié)的基本類:InputStream、OutputStream *重點注意事項:重點注意事項:1所有涉及流操作的程序,均得有語句:import java.io.*。2這4個類都是抽象類。(所以,針對不同情況的輸入輸出,要用其派生子類)。3InputStream 類中的所有方法遇到錯誤時,都引發(fā)IOException異常

5、,故,在定義方法時都會加上throws IOException 。4這4個基本類的派生類有很多,要根據(jù)具體需要選擇相應恰當?shù)念??;绢惖闹饕椒ǎ?輸入(輸入( InputStream ):):int read()讀取輸入流的下一個字節(jié)(符)。int read(byte b)將輸入流讀到字節(jié)(符)數(shù)組中。int read(byte b,int off, int len)從輸入流字節(jié)數(shù)組的 off 處讀取 len 個字節(jié)。int skip(long n)從輸入流中跳過n個字節(jié)。abstract void close()關閉輸入流釋放資源。 輸出(輸出( OutputStream ):):void

6、 wrtie(int b)將整型數(shù)b的低8位寫入輸出流。void wrtie(int b)將字節(jié)數(shù)組寫入輸出流。void wrtie(int b,int off, int len)從字節(jié)數(shù)組的off處向輸出流寫入len個字節(jié)。abstract void flush()強制將輸出流保存在緩沖區(qū)中的數(shù)據(jù)寫入終點。abstract void close()關閉輸入流釋放資源。InputStream常用方法:/讀取一個字節(jié)并以整數(shù)的形式返回(0255),如果返回-1,已到輸入流的末尾。 int read() throws IOException/讀取一系列字節(jié)并存儲到一個數(shù)組buffer,返回實際讀取

7、的字節(jié)數(shù),如果讀取前已到輸入流的末尾,返回-1。 int read(byte buffer) throws IOException/讀取length個字節(jié),并存儲到一個字節(jié)數(shù)組buffer,從offset位置開始返回實際讀取的字節(jié)數(shù),如果讀取前已到輸入流的末尾,返回-1。 int read(byte buffer, int offset, int length) throws IOExceptionInputStream/關閉流,釋放內存資源void close() throws IOException/跳過n個字節(jié)不讀,返回實際跳過的字節(jié)數(shù)。long skip(long n) throws

8、IOExceptionInputStreamTest.java例如:例如:OutputStream繼承自OutputStream的流是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字節(jié)(8 bit);下圖中深色為節(jié)點流,淺色為處理流。OutputStreamOutputStream的基本方法/向輸出流寫入一個字節(jié)數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的低8位void write(int b) throws IOException/將一個字節(jié)類型數(shù)組中的數(shù)據(jù)寫入輸入流void write(byte b) throws IOException/將一個字節(jié)類型的數(shù)組中的從指定位置(off)開始的len個字節(jié)寫入到輸出流voi

9、d write(byte b, int off, int len) throws IOExepctionOutputStream/關閉流,釋放內存資源void close() throws IOException/將輸出流中緩沖區(qū)的數(shù)據(jù)全部寫出到目的地。void flush() throws IOExcepion Reader繼承自Reader的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bit);下圖中深色為節(jié)點流,淺色為處理流。ReaderReader的基本方法的基本方法/讀取一個字符,并以整數(shù)形式返回(065535),如果返回-1,說明已到輸入流的末尾。 int read()

10、throws IOException/讀取一系列字符并存儲到一個數(shù)組buffer,返回實際讀取的字符數(shù),如果讀取前已到輸入流的末尾,則返回-1 int read(char cbuf) throws IOException/讀取length個字符,并存儲到一個字符數(shù)組buffer,從length位置開始返回實際讀取的字符數(shù),如果讀取前已到輸入流的末尾,返回-1。 int read(char cbuf, int offset, int length) throws IOExceptionReader/關閉流,釋放內存資源 void close() throws IOException/跳過n個字符

11、不讀,返回實際跳過的字節(jié)數(shù)。 long skip(long n) throws IOExceptionBufferedReadTest.java例如:例如:Writer繼承自Writer的流都是用于程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16 bit);下圖中深色為節(jié)點流,淺色為處理流。WriterWriter的基本方法/向輸出流中寫入一個字符數(shù)據(jù),該字節(jié)數(shù)據(jù)為參數(shù)b的16位。 void write(int c) throws IOException/將一個字符類型數(shù)組中的數(shù)據(jù)寫入輸出流 void write(char cbuf) throws IOException/將一個字符類型數(shù)組中的從指定

12、位置(offset)開始的length個字符寫入到輸出流. void write(char cbuf, int offset, int length) throws IOExceptionWriter/將一個字符串中的字符寫入到輸出流 void write(String string) throws IOException/將一個字符串從offset開始的length個字符寫入到輸出流 void write(String string, int offset, int length) throws IOException/關閉釋放內存資源 void close() throws IOExcep

13、tion/將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地 void flush() throws IOException節(jié)點流類型類型類型字節(jié)流字節(jié)流字符流字符流File(文件)FileInputStreamFileOutputStreamFileReaderFileWriterMemory ArrayByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriterMemory StringStringReaderStringWriterPipe(管道)PipedInputStreamPipedOutputStreamPipe

14、dReaderPipedWriterFileInputStream、FileOnputStream 、FileReader、FileWriter 流等僅能提供簡單的文件輸入輸出功能。Java 提供兩個類,用來全面管理文件系統(tǒng)。這兩個類是: 一般文件類:一般文件類:File 隨即存取文件類:隨即存取文件類:RandowAccessFile. 7.3 文件訪問FileFile類類 File類沒有指定信息怎樣從文件讀取或向文件存儲;它描述了文件本身的屬性。File對象用來獲取或處理與磁盤文件相關的信息,例如權限、時間、日期和目錄路徑。此外,F(xiàn)ile還瀏覽子目錄層次結構。 很多程序中文件是數(shù)據(jù)的根源和

15、目標。盡管它們在小應用程序中因為安全原因而受到嚴格限制,文件仍是存儲固定和共享信息的主要資源。Java中的目錄當成File 對待,它具有附加的屬性:一個可以被list()方法檢測的文件名列表。 下面的構造函數(shù)可以用來生成File對象。 File(String directoryPath) File(String directoryPath, String filename) File(File dirObj, String filename)在這里,directoryPath是文件的路徑名,filename 是文件名,dirObj是一個指定目錄的File 對象。 File 提供的主要方法:文件

16、名相關:文件名相關:String getName():返回此File對象所表示的文件名或目錄名(如果是目錄的話,返回最后一級子目錄名);String getPath():返回此File對象所對應的路徑;String getAbsolutePath():返回此File對象所對應的絕對路徑名;String getParent():返回此File對象對應目錄(最后一級子目錄)的父目錄路徑名;String renameTo(File newName):重命名此File對象對應的文件,如果重命名成功,返回true,否則返回false;獲取常規(guī)文件信息:獲取常規(guī)文件信息:long lastModified

17、():返回此File對象所對應文件的最后一次被修改時間,返回的是格林威治時間(GMT);long length():返回文件的長度。文件檢測:boolean exists():判斷文件對象的文件或目錄是否存在;boolean canWrite():判斷目錄或文件是否可寫;boolean canRead():判斷目錄或文件是否可寫;boolean isFile():判斷File對象指向的是否為一個文件;boolean isDirectory():判斷File對象指向的是否為一個目錄;boolean isAbsolute():判斷文件對象的路徑是否絕對路徑。這取決于不同的操作系統(tǒng),UNIX/Lin

18、ux/BSD等系統(tǒng)上,如果路徑的開頭是“/”,說明是一個絕對路徑,在Windows系統(tǒng)上,如果路徑的開頭是盤符,或者路徑是由“”來分隔,則說明它是一個絕對路徑; File 提供的主要方法: File 提供的主要方法:文件操作:boolean createNewFile():自動創(chuàng)建一個File對象中指定文件名的空的文件,只有在指定文件名文件不存在的時候才能成功。boolean delete():刪除File對象對應的文件或目錄;File createTempFile(String prefix,String suffix):在默認的臨時目錄下創(chuàng)建一個臨時文件,文件名由前綴prefix、系統(tǒng)生成

19、的隨機數(shù)和后綴suffix指定,返回一個表示新創(chuàng)建的臨時文件File對象;File createTempFile(String prefix,String suffix,F(xiàn)ile directory):在指定的目錄directory下創(chuàng)建一個臨時文件,文件名由前綴prefix、系統(tǒng)生成的隨機數(shù)和后綴suffix指定,返回一個表示新創(chuàng)建的臨時文件File對象;void deleteOnExit():在Java虛擬機退出的時候,請求刪除對象所指定的文件; File 提供的主要方法:目錄操作:boolean mkdir():試圖新建一個File對象所定義的一個路徑,如果新建成功,返回true,否則返

20、回false,此時File對象必須是目錄對象;String list():只對File對象為目錄時有效,返回這個目錄下的所有文件以及子目錄;File listFiles():返回File對象表示的路徑下的所有文件對象數(shù)組舉例:file1.java二、隨即存取文件類隨即存取文件類的對象只能代表文件,不能指向IO設備。定義RandowAccessFile f1=new RandowAccessFilea( 文件名,模式)模式: r:只讀方式 ; rw:讀寫方式例如:RandowAccessFile f1=new RandowAccessFile ( “l(fā)x1.txt”,“rw”)* 打開文件時,文

21、件指針指向文件開頭處。 文件指針可以按字節(jié)移動。常用方法getFilePoint():seek(long pos)指針絕對定位,定位到pos所指字節(jié)處。length():舉例1:import java.io.*;public class ramfile public static void main(String args) String s=aaaaaaaaan,bbbbbbbbbbbbn,cccccccccccn; try RandomAccessFile rf=new RandomAccessFile(lx.txt,rw); System.out.println(file point:+

22、rf.getFilePointer() ) ; System.out.println(file length:+rf.length() ) ; rf.seek(rf.length() ); System.out.println(file point now :+rf.getFilePointer() ); for(int i=0;i8) name=name.substring(0,8); else while (name.length() 8) name=name+u0000; =name; this.age=age; 舉例2:public class randfile p

23、ublic static void main(String args) throws Exception Employee e1=new Employee(aaaaaaaa,23); Employee e2=new Employee(bbbbb,25); Employee e3=new Employee(cccccccc,21); RandomAccessFile ra= new RandomAccessFile(dangan.txt,rw); ra.write(.getBytes() ) ; ra.writeInt(e1.age); ra.write(.getBy

24、tes() ) ; ra.writeInt(e2.age); ra.write(.getBytes() ) ; ra.writeInt(e3.age); / RandomAccessFile ra1= new RandomAccessFile(dangan.txt,r); System.out.println(the second employee:) ; ra.seek(0) ; ra.skipBytes(24) ; String str=; for(int i=0;i8;i+) str=str+(char)ra.readByte() ; System.out.println(

25、name:+str) ; System.out.println(age:+ra.readInt() );ra.close() ; 緩沖流緩沖流要“套接”在相應的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫的效率,同時增加了一些新的方法。jdk提供了四種緩沖流,其常用的構造方法為:BufferedInputStream(InputStream in) (p158)BufferedInputStream(InputStream in, int size)比較普通的InputStream和BufferedInputStream的read的性能:BufferedStreamPerformanc

26、e.java文件FileInputStreamBufferedInputStream緩沖流BufferedReader(Reader in)BufferedReader(Reader in,int sz)常用方法:public String readLine() BufferedWriter(Writer out)BufferedWriter(Writer out, int sz)常用方法:public void newLine() 實例:TestBufferedReaderWriter.java轉換流InputStreamReader和OutputStreamWriter用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉換。InputStreamReader需要套接在InputStreamOutputStreamWr

溫馨提示

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

評論

0/150

提交評論