IO(FileWriter/FileReader)字符流:文件的寫入、續寫、讀

字符流基類:Writer、Readerjava

字節流基類:InputStream、OutputStreamwindows

IO流中後綴名爲父類名,前綴名爲該類的功能描述。數組

字符流其實同樣走的字節,他須要把讀好的字節臨時存起來,而後查找編碼表,字符流底層用的也是字節流緩衝區,字符流底層用數組將數據臨時存儲,因此須要刷新動做編輯器

建立FileWriter流對象的示例:ide

需求:在硬盤上,建立一個文件並寫入一些文字數據。

找到一個專門用於操做文件的Writer子類對象。FileWriter。  後綴名是父類名。 前綴名是該流對象的功能。


*/
import java.io.*;
class  FileWriterDemo
{
    public static void main(String[] args) throws IOException
    {
        //建立一個FileWriter對象。該對象一被初始化就必需要明確被操做的文件(參數爲被操做的文件名)。
        //並且該文件會被建立到指定目錄下。若是該目錄下已有同名文件,將被覆蓋。
        //其實該步就是在明確數據要存放的目的地。
        FileWriter fw = new FileWriter("demo.txt");//參數可指定路徑如:"D:\\demo.txt"(將demo.txt指定到D盤(windows系統下))

        //調用write方法,將字符串寫入到流中。
        fw.write("abcde");

        //刷新流對象中的緩衝中的數據。
        //將數據刷到目的地中。
        //fw.flush();


        //關閉流資源,可是關閉以前會刷新一次內部的緩衝中的數據。
        //將數據刷到目的地中。
        //和flush區別:flush刷新後,流能夠繼續使用,close刷新後,會將流關閉。
        fw.close();
    }
}
FileWriterDemo

IO異常處理方式演示:編碼

/*
IO異常的處理方式。
*/
import java.io.*;

class  FileWriterDemo2
{
    public static void main(String[] args) 
    {
        //在外部建立變量,在後面進行賦值,避免了變量做用域的侷限性。
        FileWriter fw = null;
        try
        {
            fw = new FileWriter("demo.txt");
            fw.write("abcdefg");

        }
        catch (IOException e)
        {
            System.out.println("catch:"+e.toString());
        }
        finally
        {
            try
            {
                if(fw!=null)//若不爲空則證實建立流對象的操做成功了並未發生異常
                    fw.close();                
            }
            catch (IOException e)
            {
                System.out.println(e.toString());
            }
            
        }        

    }
}
IOExceptionProcessMode

演示對已有文件的數據續寫:spa

/*
演示對已有文件的數據續寫。
*/
import java.io.*;
class  FileWriterDemo3
{
    public static void main(String[] args) throws IOException
    {

        //傳遞一個true參數,表明不覆蓋已有的文件。並在已有文件的末尾處進行數據續寫。
        //若該文件不存在則建立一個文件。
        FileWriter fw = new FileWriter("demo.txt",true);

        fw.write("nihao\r\nxiexie");//反斜槓r加反斜槓n(\r\n)爲windows系統txt編輯器中的換行。

        fw.close();
    }
}
文件續寫

演示對已有文件的讀取方式:code

reade(char[] cbuf):該方法返回的是讀取字符的個數,該方法將字符讀入參數數組中。對象

import java.io.*;
class FileReaderDemo
{
    public static void main(String[] args) 
    {
        FileReader fr = null;
        //定義一個字符數組,用於存儲讀到的數據。
        //該數組長度通常定義爲1024的整數倍。
        char [] array = new char[1024];
        int num = 0;
        try
        {
            //建立一個文件讀取流對象,和指定名稱的文件相關聯。
            //需保證文件存在,不然會報FileNotFoundException(文件不存在異常)
            fr = new FileReader("E:\\GUOZHICHAO.txt");
            //循環讀取並輸出,
            while ((num=fr.read(array))!=-1)
            {
                System.out.println(new String(array,0,num));
            }
        }
        catch (IOException e)
        {
            System.out.println(e.toString());
        }
        finally
        {
            try
            {
                if (fr!=null)
                {
                    fr.close();
                }
            }
            catch (IOException e)
            {
                System.out.println(e.toString());
            }
            
        }
    }
}
FileReaderDemo

文件的複製過程:blog

//將C盤一個文本文件複製到D盤。

/*
複製的原理:
其實就是將C盤下的文件數據存儲到D盤的一個文件中。

步驟:
1,在D盤建立一個文件。用於存儲C盤文件中的數據。
2,定義讀取流和C盤文件關聯。
3,經過不斷的讀寫完成數據存儲。
4,關閉資源。
*/

import java.io.*;

class CopyText 
{
    public static void main(String[] args) throws IOException
    {
        copy_2();
    }


    public static void copy_2()
    {
        FileWriter fw = null;
        FileReader fr = null;
        try
        {
            fw = new FileWriter("SystemDemo_copy.txt");
            fr = new FileReader("SystemDemo.java");

            char[] buf = new char[1024];

            int len = 0;
            while((len=fr.read(buf))!=-1)
            {
                fw.write(buf,0,len);
            }
        }
        catch (IOException e)
        {
                        //由於讀寫都失敗了處理不了,能夠將流關掉並刪除文件。
            throw new RuntimeException("讀寫失敗");//此處爲簡單異常處理

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

    //從C盤讀一個字符,就往D盤寫一個字符。
    public static void copy_1()throws IOException
    {
        //建立目的地。
        FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");

        //與已有文件關聯。
        FileReader fr = new FileReader("RuntimeDemo.java");

        int ch = 0;

        while((ch=fr.read())!=-1)
        {
            fw.write(ch);
        }
        fw.close();
        fr.close();
    }
}
    
copyFileDemo

 

英語時間:

File:

  • n. 文件;檔案;文件夾;銼刀
  • vt. 提出;銼;琢磨;把…歸檔
  • vi. 列隊行進;用銼刀銼
  • n. (File)人名;(匈、塞)菲萊

Process:

  • vt. 處理;加工
  • n. 過程,進行;方法,步驟;做用;程序;推移
  • vi. 列隊前進
  • adj. 通過特殊加工(或處理)的

mode:

  • n. 模式;方式;風格;時尚
  • n. (Mode)人名;(德、英、法、乍、瑞典)莫德

Writer:

  • n. 做家;做者

 copy:

  • vi. 複製;複印;抄襲
  • vt. 複製;複印;抄襲
  • n. 副本;一冊;摹仿
相關文章
相關標籤/搜索