天天看點

JavaSE@拓展補遺@筆記[email protected]流@字元流介紹及常用方法一、字元流

一、字元流

所有的檔案都是位元組檔案,而隻有文本檔案的資料可以稱為字元。

1、字元輸入流父類Reader

方法 說明
close() 關閉流資源
read() 讀取一個字元
read(char[] chs) 讀取一個字元數組的内容

2、FileReader類

構造方法

方法 說明
FileReader(File file) 使用File對象的路徑建立輸入流
FileReader(String fileName) 使用字元串路徑建立輸入流
  • 代碼示範

構造方法示範:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
​
public class Test01 {
    public static void main(String[] args) throws FileNotFoundException {
        //字元輸入流構造方法
        /*
            注意事項:
                1.如果檔案不存在,輸入流會報錯(系統找不到指定的檔案。)
                2.如果寫的是檔案夾,流對象都會報錯(拒絕通路。)
         */
        //FileReader(File file)
        //使用File對象的路徑建立輸入流
        //FileReader fr = new FileReader(new File("day10\\123.txt"));
​
        //FileReader(String fileName)
        //使用字元串路徑建立輸入流
        FileReader fr2 = new FileReader("day10\\123.txt");
    }
}
           

常用讀取方法示範(一次讀取一個字元和一次讀取字元數組):

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
​
public class Test02 {
    public static void main(String[] args) throws IOException {
        //字元輸入流的常用方法
        FileReader fr = new FileReader("C:\\Users\\jin\\Desktop\\檔案複制.java");
//        FileInputStream fr = new FileInputStream("C:\\Users\\jin\\Desktop\\檔案複制.java");
​
        //read() :讀取一個字元
        //傳回的是字元對應的數值
        //如果讀到了檔案的末尾會傳回-1
        //int i;
        //while((i=fr.read()) != -1){
        //    System.out.println((char)i);
        //}
​
        //read(char[] chs): 讀取一個字元數組的内容
        //讀取傳回的是讀取到的字元個數,如果讀到了末尾會傳回-1
        char[] chs = new char[5];
        int len;
        while((len=fr.read(chs)) != -1){
            System.out.println(new String(chs,0,len));
        }
​
​
        //close()
        //關閉流資源
        fr.close();
    }
}
           

3、字元輸出流父類Writer

常用方法

方法 說明
close() 關閉流資源
flush() 重新整理
write(int c) 寫出一個字元
write(char[] cbuf) 寫出一個字元數組的内容
write(char[] b, int off, int len) 寫出一個字元數組的一部分
write(String str) 寫出一個字元串

4、FileWriter類

構造方法

方法 說明
FileWriter(File file) 用File對象所表示的路徑建立輸出流對象
FileWriter(String fileName) File字元串所表示的路徑建立輸出流對象
FileWriter(File file,boolean b) 用File對象所表示的路徑建立輸出流對象,true表示續寫
FileWriter(String fileName,boolean b) File字元串所表示的路徑建立輸出流對象,true表示續寫
  • 代碼示範

構造方法示範:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
​
public class Test03 {
    public static void main(String[] args) throws IOException {
        //字元輸出流構造方法
        /*
            注意事項:
                1.如果檔案不存在,輸出流會建立檔案
                2.如果檔案已存在,輸出流會覆寫檔案
                3.所有流隻能操作檔案,不能操作檔案夾(拒絕通路。)
                4.如果構造加了參數true 表示不清空檔案 續寫
         */
        //FileWriter(File file)
        //用File對象所表示的路徑建立輸出流對象
        //FileWriter fw = new FileWriter(new File("day10\\123.txt"));
​
​
        //FileWriter(String fileName)
        //File字元串所表示的路徑建立輸出流對象
        //FileWriter fw2 = new FileWriter("day10\\123.txt");
​
        //FileWriter(File file,boolean b)
        //用File對象所表示的路徑建立輸出流對象,true表示續寫
        //FileWriter fw = new FileWriter(new File("day10\\123.txt"),true);
​
        //FileWriter(String fileName,boolean b)
        //File字元串所表示的路徑建立輸出流對象,true表示續寫
        FileWriter fw2 = new FileWriter("day10\\123.txt",true);
    }
}
           
  • 常用方法示範

常用方法:

import java.io.FileWriter;
import java.io.IOException;
​
public class Test05 {
    public static void main(String[] args) throws IOException {
        //建立對象
        FileWriter fw = new FileWriter("day10\\123.txt");
​
        //write(int c)
        //寫出一個字元
        fw.write(97);
        fw.write('a');
        fw.write('我');
​
        //write(char[] cbuf)
        //寫出一個字元數組的内容
        char[] chs = {'a','b','c','我','愛','你'};
        fw.write(chs);
​
        //write(char[] b, int off, int len)
        //寫出一個字元數組的一部分
        //輸出“我愛你”這部分,3索引開始輸出3個
        fw.write(chs,3,3);
​
        //write(String str)
        //寫出一個字元串
        fw.write("石原裡美");
        
        //關閉資源
        fw.close();
    }
}
           
  • 關閉和重新整理

字元輸出流底層有一個緩沖區,輸出的字元會被先放在緩沖區。

當調用重新整理或者是緩沖區放滿時才會真正的輸出到檔案中。

close()方法自帶重新整理功能,隻要最後記得關流,中間可以不做重新整理。

import java.io.FileWriter;
import java.io.IOException;
​
public class Test04 {
    public static void main(String[] args) throws IOException {
        //字元輸出流的常用方法
        FileWriter fw = new FileWriter("day10\\123.txt");
​
        //輸出
        fw.write(97);
        fw.write(97);
​
        //flush()
        //重新整理(可以把緩沖區的資料重新整理到檔案中)
        //close()
        //關閉方法其實自帶了重新整理功能
        //在最後隻要調用了關閉就可以把緩沖區的内容全部放到檔案中
        //關閉流資源
        fw.close();
    }
}
           

常見錯誤:

//要求:給檔案輸出123456789
​
//-------使用位元組輸出流不好做------------------------
//建立位元組輸出流
FileOutputStream fos = new FileOutputStream("day10\\123.txt");
//循環
for (int i = 1; i < 10; i++) {
    fos.write(i);
}
//關流
fos.close();
​
​
​
-------使用字元輸出流好做------------------------
//建立字元輸出流
FileWriter fos = new FileWriter("day10\\123.txt");
//循環
for (int i = 1; i < 10; i++) {
    fos.write(i+"");
}
//關流
fos.close();
           

簡單結論:

位元組流:
    用于操作非文本資料(也可以操作文本資料但是我們不用)
字元流:
    用于操作文本資料(不能操作非文本資料)