JavaIO流-FileReader、FileWriter字元流
阿新 • • 發佈:2020-07-29
import org.junit.Test; import java.io.*; /** * 一、流的分類 * 1.操作資料單位:位元組流、字元流 * 2.資料的流向:輸入流、輸出流 * 3.流的角色:節點流、處理流 * * 二、流的體系結構 * 抽象基類 節點流 緩衝流(處理流的一種) * InputStream FileInputStream (read(byte [] buffer)) BufferedInputStream (read(byte [] buffer)) * OutputStream FileOutputStream (write(byte [] buffer,0,len)) BufferedOutputStream (write(byte [] buffer,0,len)) * Reader FileReader (read(char [] cbuf)) BufferedReader (read(char [] cbuf)) * Writer FileWriter (write(char [] cbuf,0,len)) BufferedWriter (write(char [] cbuf,0,len)) *@author orz */ public class FileReadWriteTest { /** * 將hello.txt檔案內容讀入程式中,並輸出到控制檯a * FileReader基本操作 * 1.例項化File類的物件,指明要操作的檔案 * 2.提供具體的流(FileReader) * 3.資料讀入(read) * 4.流的關閉 * * * 說明點 * 1.public int read()理解:返回讀入的一個字元。如果打到末尾,返回-1 * public int read(char cbuf[]) :返回每次讀入cbuf陣列中的字元個數。如果達到檔案末尾,返回-1 * 2.異常處理:為了保證流資源一定可以執行關閉操作。需要使用try-catch-finally處理 * 3.讀入檔案一定要存在,否則會報FileNotFoundException*/ @Test public void test1() { //相對於module //1.例項化File類的物件,指明要操作的檔案 // FileReader fr=null; try { File file=new File("hello1.txt"); //2.提供具體的流 fr=new FileReader(file); //3.資料讀入 //public int read()//返回讀入的一個字元,如果達到檔案末尾,返回-1 int data; while ((data=fr.read())!=-1) { System.out.print((char)data); } }catch (IOException e) { e.printStackTrace(); } finally { //4.流的關閉 if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } @Test public void test2() { //1.File類的例項化 //2.FIleReader流例項化 //3.讀入的操作 //4.資源的關閉 FileReader fr=null; try { File file=new File("hello.txt"); fr=new FileReader(file); char [] cbuf=new char[5]; int len; while ((len=fr.read(cbuf))!=-1) { for (int i = 0; i <len ; i++) { System.out.print(cbuf[i]); } } } catch (IOException e) { e.printStackTrace(); } finally { if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 從記憶體中寫出資料到硬碟檔案裡 * 1.例項化File類的物件,指明要操作的檔案 * 2.提供FileWriter的物件,用於資料的寫出 * 3.寫出的操作(write) * 4.資源的關閉 * * *說明: * 1.輸出操作,對應的File可以不存在。並不會報異常 * 2.File對應的硬碟如果檔案存在: * 如果流使用的構造器是:FileWriter(file,false)/FileWriter(file):對原檔案進行覆蓋 * 如果流使用的構造器是:FileWriter(file,true):不會對原檔案覆蓋,而是在原檔案基礎上追加內容 */ @Test public void test3() { // 1.提供File類的物件,指明要寫到的檔案 File file=new File("hello.txt"); //2.提供FileWriter的物件,用於資料的寫出 FileWriter fw=null; try { fw=new FileWriter(file,true); //3.寫出的操作 fw.write("I have a dream\n"); fw.write("I am 19 years old\n"); } catch (IOException e) { e.printStackTrace(); } finally { if(fw!=null) { try { //4.資源的關閉 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 綜合使用輸入輸出流(相當於複製檔案) * //1.建立File類的物件,指明讀入和寫出的檔案 * //2.建立輸入流、輸出流物件 * //3.資料的讀入和寫出操作 * //4.流資源關閉 * * */ @Test public void test4() { //1.建立File類的物件,指明讀入和寫出的檔案 FileReader fr=null; FileWriter fw=null; try { //2.建立輸入流、輸出流物件 File file1=new File("hello.txt"); File file2=new File("hi.txt"); fr=new FileReader(file1); fw=new FileWriter(file2); //3.資料的讀入和寫出操作 char [] cbuf=new char[5]; int len; while ((len=fr.read(cbuf))!=-1) { //每次寫出len個字元 fw.write(cbuf,0,len); } }catch (IOException e) { e.printStackTrace(); } finally { //4.流資源關閉 try { if(fw!=null) { fw.close(); } }catch (IOException e) { e.printStackTrace(); } try { if(fr!=null) { fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } @Test public void test5() { } }