FileWriter、FileReader

1. 【應用】IO流概述及FileWriter類使用

a. 【了解】能夠闡述IO流的作用

數據的傳輸、java對數據的操作都是通過流的方式


圖片.png
b. 【應用】能夠獨立完成利用FileWriter向文本文件中寫數據以及追加數據

1、FlieWriter

FileWriter 用于寫入字符流。要寫入原始字節(jié)流,請考慮使用 FileOutputStream。
常用構造方法:

根據給定的文件名構造一個 FileWriter 對象。 
參數:
fileName - 一個字符串,表示與系統(tǒng)有關的文件名。 
拋出: 
IOException - 如果指定文件存在,但它是一個目錄,而不是一個常規(guī)文件;或者該文件不存在,但無法創(chuàng)建它;抑或因為其他某些原因而無法打開它

根據給定的文件名以及指示是否附加寫入數據的 boolean 值來構造 FileWriter 對象。 

參數:
fileName - 一個字符串,表示與系統(tǒng)有關的文件名。
append - 一個 boolean 值,如果為 true,則將數據寫入文件末尾處,而不是寫入文件開始處。 
拋出: 
IOException - 如果指定文件存在,但它是一個目錄,而不是一個常規(guī)文件;或者該文件不存在,但無法創(chuàng)建它;亦或因為其他某些原因而無法打開它
FileWriter(String fileName) 
         根據給定的 File 對象構造一個 FileWriter 對象。 

參數:
file - 要寫入數據的 File 對象。 
拋出: 
IOException - 如果該文件存在,但它是一個目錄,而不是一個常規(guī)文件;或者該文件不存在,但無法創(chuàng)建它;抑或因為其他某些原因而無法打開它

根據給定的 File 對象構造一個 FileWriter 對象。如果第二個參數為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處。 

參數:
file - 要寫入數據的 File 對象
append - 如果為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處 
拋出: 
IOException - 如果該文件存在,但它是一個目錄,而不是一個常規(guī)文件;或者該文件不存在,但無法創(chuàng)建它;抑或因為其他某些原因而無法打開它

FileWriter向文件中寫數據操作步驟:
a:使用FileWriter流關聯(lián)文件
b:利用FileWriter的寫方法寫數據 write()
c:利用FileWriter的刷新方法將數據從內存刷到硬盤上 flush()
d:利用FileWriter的關流方法將釋放占用的系統(tǒng)底層資源 close()
代碼:

public class FileWriteTest {
    public  static  void main(String[] args) {
        FileWriterTest1();
        FileWriterTest2();
    }
    public static void  FileWriterTest1(){
        //第一種方式,直接使用fileName
        FileWriter fw = null;
        try {
            fw = new FileWriter("c:\\a.txt");
            fw.write("IO你好");
            fw.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try{
                if(null != fw)
                    fw.close();
            }catch (IOException e) {

            }
        }
    }
    public static void FileWriterTest2(){
        //使用文件格式
        FileWriter  fw2 = null;
        try {
            fw2 = new FileWriter(new File("c://b.txt"));
            fw2.write("file");
            fw2.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(null != fw2) {
                try{
                    fw2.close();
                }catch (IOException e){

                }
            }
        }
    }
}
c. 【應用】能夠理解并用代碼測試write()的重載方法

void write(String str):寫一個字符串數據
void write(String str,int index,int len):寫一個字符串中的一部分數據
void write(int ch):寫一個字符數據,這里寫int類型的好處是既可以寫char類型的數據,也可以寫char對應的int類型的值。'a',97
void write(char[] chs):寫一個字符數組數據

2. 【應用】FileReader類使用和緩沖流使用

a. 【應用】能夠獨立使用FileReader讀數據一次讀取一個字符

使用read()方法

public class FileReaderTest {

    public static void main(String[] args) {
        readCharOneByOne("c://a.txt");
        readCharOneByOne(new File("c://b.txt"));
    }

    public static void readCharOneByOne(String fileName) {
        FileReader reader = null;
        try {
            reader = new FileReader(fileName);
            int ch = 0;
            while ((ch = reader.read()) != -1) {
                System.out.println((char) (ch));
            }
        } catch (IOException e) {

        }

    }

    public static void readCharOneByOne(File file) {
        FileReader reader = null;
        try {
            reader = new FileReader(file);
            int ch = 0;
            while ((ch = reader.read()) != -1) {
                System.out.println((char) (ch));
            }
        } catch (IOException e) {

        }

    }
}
b. 【應用】能夠寫出利用FileReader和FileWrtie完成文本文件復制的兩種方式

\color{red}{第一種:讀一個字符寫一個字符}

 public static void  copyIFileTest1(String srcFileName, String dstFileName){
        FileReader fr = null;
        FileWriter fw = null;
        try {
            fr = new FileReader(srcFileName);
            fw = new FileWriter(dstFileName);
            int ch = 0;
            while ((ch = fr.read())!=-1) {
                fw.write((char)ch);
            }
            fw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {

        }finally {
            if(null != fr) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != fw) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

\color{red}{第二種:用一個字符數組存儲讀取的字符,最后一起寫入文本}

public static  void  copyFileTest2(String srcFileName, String dstFileName) {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            fr = new FileReader(srcFileName);
            fw = new FileWriter(dstFileName);
            char [] ch = new char[1024];
            int len = 0;
            while ((len = fr.read(ch))!= -1) {
                fw.write(ch, 0, len);
            }
            fw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {

        } finally {
            if(null != fr) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != fw) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
c. 【應用】能夠使用緩沖流BufferedReader和BufferedWriter完成文本文件復制
d. 【應用】能夠使用readLine()和newLine()完成文本文件復制

3. 【應用】IO流相關案例

a. 【應用】能夠熟練寫出復制文本文件的五種方式
b. 【應用】能夠獨立完成將集合中的數據寫到文本文件中
c. 【應用】能夠將文本文件的數據讀取到集合中
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容