java文件字符流和字符緩沖流
/**
* 測試文件字符流FileReader/FileWriter
*/
public class TestFileRW {
? ?public static void main(String[] args) {
? ? ? ?try (FileReader fr = new FileReader("iostream/testFile.txt");
? ? ? ? ? ? FileWriter fw = new FileWriter("iostream/testFile2.txt")){
? ? ? ? ? ?//字符流以字符為單位讀寫數(shù)據(jù)
? ? ? ? ? ?for (int i = fr.read();i!=-1;i = fr.read()){
? ? ? ? ? ? ? ?//.read()返回int在0-65535之間,對應unicode字符集,讀完返回-1
? ? ? ? ? ? ? ?fw.write(i);
? ? ? ? ? ? ? ?//.write(int)一次寫入16位/2byte二進制數(shù)
? ? ? ? ? ?}
? ? ? ? ? ?fw.flush();
? ? ? ?}catch (Exception e ){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?try(FileWriter fw = new FileWriter("iostream/testFile2.txt",true)){
? ? ? ? ? ?//FileWriter在實例化時會對指定路徑的文件進行覆蓋,如果沒有該文件會新建,如果有會覆蓋成新的空文件,而第二個參數(shù)boolean append 為true時會在原文件的后面續(xù)寫內容,不破壞原始內容,如果沒有該文件也會新建
? ? ? ? ? ?fw.write(".write()方法可以直接寫入字符串\r\n");
? ? ? ? ? ?//字符串中換行使用\r\n回車符+換行符完成
? ? ? ? ? ?fw.flush();
? ? ? ?}catch (Exception e ){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?try(FileReader fr = new FileReader("iostream/testFile2.txt");
? ? ? ? ? ?FileWriter fw = new FileWriter("iostream/testFile3.txt")){
? ? ? ? ? ?char buffer[] = new char[1024];
? ? ? ? ? ?//使用緩沖減少寫入方法調用頻率,字符流的緩沖的類型為char[]
? ? ? ? ? ?//字符流中沒有.available()方法估算長度
? ? ? ? ? ?for (int len = fr.read(buffer);len!=-1;len = fr.read(buffer)){
? ? ? ? ? ? ? ?//.read(char[])返回讀取到的字符長度
? ? ? ? ? ? ? ?fw.write(buffer,0,len);
? ? ? ? ? ? ? ?//和字節(jié)輸出流類似,傳入數(shù)組、偏移量、長度
? ? ? ? ? ?}
? ? ? ? ? ?fw.flush();
? ? ? ?}catch (Exception e){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?try(FileWriter fw = new FileWriter("iostream/testFile3.txt");
? ? ? ? ? ?BufferedWriter bw = new BufferedWriter(fw)){
? ? ? ? ? ?//BufferedWriter字符緩沖流,處理流,對節(jié)點流進行包裝,提供緩沖
? ? ? ? ? ?bw.write("write方法沒有變化");
? ? ? ? ? ?bw.write("不使用換行時這句話和上一句在同一行");
? ? ? ? ? ?bw.newLine();
? ? ? ? ? ?bw.write("使用newLine方法實現(xiàn)換行");
? ? ? ? ? ?bw.flush();
? ? ? ?}catch (Exception e){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?try(FileReader fr = new FileReader("iostream/testFile3.txt");
? ? ? ? ? ?BufferedReader br = new BufferedReader(fr)){
? ? ? ? ? ?System.out.println(br.readLine());
? ? ? ? ? ?//.readLine()方法一次讀取一行,一行讀完結尾不包含\r\n
? ? ? ?}catch (Exception e){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?try(BufferedReader br = new BufferedReader(new FileReader("iostream/testFile3.txt"));
? ? ? ? ? ?BufferedWriter bw = new BufferedWriter(new FileWriter("iostream/testFile4.txt"))){
? ? ? ? ? ?int num=1;
? ? ? ? ? ?for (String line = br.readLine();line!=null;line = br.readLine()){
? ? ? ? ? ? ? ?//當內容讀完.readLine()返回空
? ? ? ? ? ? ? ?bw.write(num+".\t"+line);
? ? ? ? ? ? ? ?bw.newLine();
? ? ? ? ? ? ? ?//.readLine()方法讀取的字符串不包含\r\n,在寫入時需要加.newLine()方法換行
? ? ? ? ? ? ? ?num++;
? ? ? ? ? ? ? ?//行號
? ? ? ? ? ?}
? ? ? ? ? ?bw.flush();
? ? ? ?}catch (Exception e){
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ?}
}