牛客網Java刷題知識點之輸入流、輸出流、字節流、字符流、字節流的抽象基類(InputStream、OutputStream)、字符流的抽象基類(Reader、Writer)、FileWriter、FileReader


 

 

 

  不多說,直接上干貨!

 

 

   IO流用來處理設備之間的數據傳輸。

  java對數據的操作是通過流的方式。

  java用於操作流的對象都在IO包中。

  IO流按操作數據分為兩種:字節流和字符流

  IO流按流向分為:輸入流、輸出流

 

 

 

 

 

 

 

 

輸入流和輸出流

輸入流做什么事: 將硬盤中的數據出來,放到內存里去運算。

輸出流做什么事:將內存中的數據,到硬盤里去。

  輸入流和輸出流相對於內存設備而言。

  將外設中的數據讀取到內存中:輸入。
  將內存的數寫入到外設中:輸出。

 

 

往內存里,就是輸入流
輸入流做什么事: 將硬盤中的數據讀出來,放到內存里去運算。
從內存出,就是輸出流。
輸出流做什么事:將內存中的數據,寫到硬盤里去。 
 
 

 

 

 

 

 

 

字節流和字符流

字符流的由來:
  其實就是:字節流讀取文字字節數據后,不直接操作而是先查指定的編碼表。獲取對應的文字。
  在對這個文字進行操作。簡單說:字節流+編碼表。

 

 

字節流的抽象基類:  

  InputStream、OutputStream

 

 

字符流的抽象基類:

  Reader、Writer

創建一個可以往文件(因為是在磁盤)中寫入字符數據的字符輸出流對象。(因為是對內存而言,是取出,所以是輸出流)

 

注意:由這四個類派生出來的子類名稱都是以其父類名作為子類名的后綴。

  如InputStream的子類FileInputStream。

    如Reader的子類FileReader。

  如Writer的子類FileWriter。

 

字節流:
  FileInputStream
  FileOutputStream
  BufferedInputStream
  BufferedOutputStream


字符流:
  Writer Reader
  FileReader
  FileWriter
  BufferedReader
  BufferedWriter

 

 

 

 

字符流FileWriter

 FileWriterDemo.java

 

 

 

 

 

 

 

 FileWriterDemo.java(涉及到換行和續寫)

package zhouls.bigdata.DataFeatureSelection.test;

import java.io.FileWriter;
import java.io.IOException;

//需求:將一些文字存儲到硬盤一個文件中。

public class FileWriterDemo {
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        //創建一個可以往文件中寫入字符數據的字符輸出流對象。
        /*
         * 既然是往一個文件中寫入文字數據,那么在創建對象時,就必須明確該文件(用於存儲數據的目的地)。
         * 如果文件不存在,則會自動創建。
         * 如果文件存在,則會被覆蓋。
         * 如果構造函數中加入true,可以實現對文件進行續寫*/
        FileWriter fw = new FileWriter("demo.txt",true);
        /*
         * 調用Writer對象中的write(string)方法,寫入數據。 
         * 其實數據寫入到臨時存儲緩沖區中。
         */
        fw.write("abcde"+LINE_SEPARATOR+"hahaha");//LINE_SEPARATOR是換行符
        fw.write("xixi");
        
        //進行刷新,將數據直接寫到目的地中。    注意:flush可以用多次。
        fw.flush();
        
        //關閉流,關閉資源。在關閉前會先調用flush刷新緩沖中的數據到目的地。        注意:close可以用多次。
        fw.close();
    }
}

 

 

 

 

 

 

 

FileWriter的IO異常處理

 

 

 IOExceptionDemo.java

package zhouls.bigdata.DataFeatureSelection.test;

import java.io.FileWriter;
import java.io.IOException;

public class IOExceptionDemo {
    private static final String LINE_SEPARATOR = System
            .getProperty("line.separator");
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) {
        FileWriter fw = null;
        try {
            fw = new FileWriter("demo.txt");
            fw.write("abcde" + LINE_SEPARATOR + "hahaha");
        } catch (IOException e) {
            System.out.println(e.toString());
        } finally {
            if (fw != null) try { fw.close(); } catch (IOException e) { // code.... throw new RuntimeException("關閉失敗"); }
        }
    }
}

 

 

 

 

 

 

 

 字符流FileReader

  讀取方式

 

 

 

 

FileReaderDemo.java

package zhouls.bigdata.DataFeatureSelection.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//需求:讀取一個文本文件。將讀取到的字符打印到控制台.

public class FileReaderDemo {
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        //1,創建讀取字符數據的流對象。
        //在創建讀取流對象時,必須要明確被讀取的文件。一定要確定該文件是存在的。 
        //用一個讀取流關聯一個已存在文件。 
        FileReader fr = new FileReader("demo.txt");
        int ch = 0;
        while((ch=fr.read())!=-1){
            System.out.println((char)ch);
        }
        fr.close();
    }

}

 

 

 

 

   也可以這樣來進行讀取

 

 

 FileReaderDemo.java

package zhouls.bigdata.DataFeatureSelection.test;

import java.io.FileReader;
import java.io.IOException;

//需求:讀取一個文本文件。將讀取到的字符打印到控制台.

public class FileReaderDemo{
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");
         //使用read(char[])讀取文本文件數據。
         //先創建字符數組。
        char[] buf = new char[1024];
        int len = 0;
        while((len=fr.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
        fr.close();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM