Java的輸入、輸出流

1.I/O流庫提供的四個重要的abstract類數組

  • InputStream 字節輸入流
  • Reader 字符輸入流
  • OutputStream 字節輸出流
  • Writer 字符輸出流

前二者爲其子類提供了重要的讀取數據的read()方法,後二者爲其子類提供了重要的寫入數據的write()方法。app

2.文件spa

建立一個File對象的構造方法有:對象

  • File(String filename);      
  • File(String directoryPath,String filename);      
  • File(File f, String filename);

filename是文件名字,directory Path是文件的路徑,f是一個目錄。繼承

使用第一種構造方法建立文件時,文件被認爲時與當前應用程序再同一目錄下。接口

3.文件字節流字符串

1):FileInputStream類是InputStream類的子類,稱爲文件字節輸入流,按字節讀取文件中的數據。該類的全部方法都是從InputStream類繼承來的。it

構造方法:object

  • FileInputStream(String name)
  • FileInputStream(File file)

構造方法參數指定的文件稱爲輸入流的源,輸入流經過使用read()方法從輸入流讀出源中的數據。file

read方法的形式:

  • int read():從輸入流中順序讀取單個字節的數據
  • int read(byte b[])
  • int read(byte b[],int off,int len)把多個字節讀到一個字節數組中,返回實際讀取的字節個數。參數off指定read()方法把數據存放在字節數組b中的位置,參數len指定該方法將讀取的最大字節數。

注:FileInputStream流順序地讀取文件,只要不關閉流,每次調用read()方法就順序地讀取文件中其他地內容,知道文件的末尾或流被關閉。故在不使用的時候應該調用.close()關閉流。

2):FileOutputStream提供了基本的文件寫入能力,是OutputStream的子類,稱爲文件字節輸出流。文件字節輸出流按字節將數據寫入到文件中。

構造方法:

  • FileOutputStream(String name)  
  • FileOutputStream(File file)  
  • FileOutputStream(String name, boolean append)  
  • FileOutputStream(File file, boolean append) 

輸出流使用write()方法把數據寫入輸出流到達目的地。

  • public void write(byte b[]):寫b.length個字節到輸出流。
  • public void write(byte b[],int off,int len):從給定字節數組中起始於偏移量off處寫len個字節到輸出流,參數b是存放了數據的字節數組。

注:只要不關閉流,每次調用write()方法就順序地像文件寫入內容,直到流被關閉。

4.文件字符流

1):FileReader類是Reader的子類,稱爲文件字符輸入流。文件字符輸入流按字符讀取文件中的數據。

構造方法:

  • FileReader(String name)
  • FileReader(File file)

構造方法參數指定的文件稱爲輸入流的源,輸入流經過使用read()方法從輸入流獨處源中的數據。

  • int read() 輸入流調用該方法從源中讀取一個字符。該方法返回一個整數,若是未讀出字符就返回-1。
  • int read(char b[])輸入流經過調用該方法從源中讀取b.length個字符到字符數組b中,返回實際讀取的字符數目。若是到達文件的末尾,則返回-1.
  • int read(char b[],int off,int len)輸入流調用該方法從源中讀取len個字符並存放到字符數組b中,返回實際讀取的字符數目。若是到達文件的末尾,則返回-1。其中,參數off知道該方法從字符數組b的什麼地方存放數據。

2)FileWrite類:

FileWrite提供了基本的文件寫入能力。FileWrite類是Write的子類,稱爲文件字符輸出流。文件字符輸出流按字符將數據寫入到文件中。

構造方法:

  • FileWriter(String name);    
  • FileWriter (File file);  
  • FileWriter (String name, boolean append);  
  • FileWriter (File file, boolean append);

構造方法參數指定的文件稱爲輸出流的目的地。輸出流使用write()方法把數據寫入輸出流到目的地。

  • public void write(char b[])  寫b.length個字符到輸出流  
  • void.write(char b[],int off,int len)  從給定字符數組中起始於偏移量off處寫len個字符到輸出流,參數b是存放了數據的字符數組  
  • void write(String str)  把字符串中的所有字符寫入到輸出流  
  • void write(String str,int off,int len)  從字符串str中起始於偏移量off處寫len個字符到輸出流

只要不關閉流,每次調用write()方法就順序地向文件寫入內容,直到流被關閉。

5.緩衝流

1)BufferedReader類

    BufferedReader類建立的對象稱爲緩衝輸入流,該輸入流的指向必須是一個Reader流,稱爲BufferedReader流的底層流,底層流負責將數據讀入緩衝區。     BufferedReader流的源就是這個緩衝區,緩衝輸入流再從緩衝區中讀取數據。  

    能夠將BufferedReader與FileReader鏈接,而後BufferedReader就能夠按行讀FileReader指向的文件。BufferedReader的構造方法以下:

BufferedReader(Reader in)     BufferedReader流可以讀取文本行,方法是         readLine()     能夠向BufferedReader傳遞一個Reader對象(如FileReader的實例)來建立一個BufferedReader對象:    

FileReader inOne=new FileReader("Student.txt")          

BufferedReader inTwo=new BufferedReader(inOne); 而後inTwo調用readLine()順序讀取文件「Student.txt」的一行。

2)BufferedWriter類

能夠將BufferedWriter流和FileWriter流鏈接在一塊兒,而後使用BufferedWriter流將數據寫到目的地。    

FileWriter流稱爲BufferedWriter的底層流,BufferedWriter流將數據寫入緩衝區,底層流負責將數據寫到最終的目的地。例如,

FileWriter tofile=new FileWriter("hello.txt");          

BufferedWriter out=new BufferedWriter(tofile);    

BufferedReader流調用方法:          

write(String str)          

write(String s,int off,int len)     把字符串s或s的一部分寫入到目的地。     BufferedWriter調用newLine()方法,能夠向文件寫入一個回行,調用flush()能夠刷新緩衝區。

 

 

 

6.緩衝流

ObjectInputStream類和ObjectOutputStream類建立的對象被稱爲對象輸入流和對象輸出流。構造方法:          

ObjectInputStream(InputStream in)          

ObjectOutputStream(OutputStream out)        

對象輸出流使用writeObject(Object obj)方法將一個對象obj寫入輸出流送往目的地,對象輸入流使用readObject()從源中讀取一個對象到程序中。    

將一個對象寫入到文件時,首先用FileOutputStream建立一個文件輸出流,以下所示:

FileOutputStream file_out=new FileOutputStream("tom.txt"); ObjectOutputStream object_out=new ObjectOutputStream(file_out);  

準備從文件中讀入一個對象到程序中時,首先用FileInputStream建立一個文件輸入流,以下所示:

FileInputStream file_in=new FileInputStream("tom.txt");

ObjectInputStream object_in=new ObjectInputStream(file_in);

注:①當咱們使用對象流寫入或讀入對象時,要保證對象是序列化的。 ②一個類若是實現了Serializable接口,那麼這個類建立的對象就是序列化的對象。 ③使用對象流把一個對象寫入到文件時不只保證該對象是序列化的,並且該對象的成員對象也必須是序列化的。

相關文章
相關標籤/搜索