黑馬程序員_JavaIO流(一)

IO(Input Output)流

概述:

  • IO流(數據流)用來處理設備之間的數據傳輸。
  • Java對數據的操做是經過流的方式。
  • Java用於操做流的對象都在IO包中。
  • 流按操做數據分爲兩種:字節流與字符流。
  • 流按流向分爲:輸入流,輸出流。

IO流經常使用基類:java

字節流的抽象基類:InputStream,OutputStream。windows

字符流的抽象基類:Rander,Writer。數組

注:由這四個類派生出來的子類名稱都是以其父類名做爲子類名的後綴。如:InputStream的子類FileInputStream,Rreader的子類FileReader。spa

 

FireWriter

既然IO流是用於操做數據的,那麼數據最多見的體現形式是:文件。那麼先以操做文件爲主來演示。code

需求:在硬盤上,建立一個文件並寫入一些文字數據。找到一個專門用於操做文件的Writer子類對象。FileWriter。  後綴名是父類名,前綴名是該流對象的功能。對象

//建立一個FileWriter對象,該對象一被初始化就必需要明確被操做的文件。blog

//並且該文件會被建立到指定的目錄下的。「new」在堆內存中產生一個對象,同時在指定的目錄下產生一個指定名稱的文件。內存

//若是該目錄下已有同名文件,將被覆蓋。其實該步就是在明確數據要存放的目的地。資源

FileWriter fw = new FileWriter("demo.txt");//未報告的異常 java.io.IOException:必須對其進行捕捉,或聲明以便拋出。字符串

//凡是能和設備上數據發生關係去處理的收回發生IO異常。不管讀,仍是寫,或者建立。

//調用write方法,將字符串寫入到流中。

fw.write("abcde");

//刷新流對象中的緩衝中的數據。將數據刷到目的地中。

//fw.flush();

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

//流對象調用的是系統中的資源進行數據的創建,因此close動做必需要作。

 

IO異常處理方式

標準IO異常處理方式:

import java.io.*;

class FileWriterDemo2;
{
    public static void main(String[] args)
    {
        FileWriter fw = null;//外建引用,try內初始。
        try
        {
            fw = new FileWriter("demo.txt");
            fw.write("abcdefg");
        }
        catch(IOException e)
        {
            System.out.println(e.toString());
        }
        finally
        {
            try
            {
                if(fw!null)//提升代碼健壯性。注意多流狀況下要分別去關。
                {
                     fw.close();
                }
            }
            catch(IOException e)
            {
                 System.out.println(e.toString());
            }
            
          
        }

    }
}

 

文件的續寫

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

在windows當中,回車符是由兩個字符來表示的,\r和\n。在Linux中,\n表明換行。(單獨的\n在windows中不能識別,因此顯示出一個小黑格。)

 

文本文件讀取方式一

第一種方式:經過read方法獲取。

import java.io.*;

class FileReaderDemo
{
    public static void main(String[] args)throws IOException
    {
        //建立一個文件讀取流對象,和指定名稱的文件相關聯。
        //要保證該文件是已經存在的,若是不存在,會發生異常FileNotFoundException。
   
        FileReader fr = new FileReader("demo.txt");
        
        //調用讀取流對象的read方法。
        //read()一次讀一個字符,並且會自動往下讀。\

        int ch = 0;
        while((ch=fr.read())!=-1)
        {
            System.out.print((char)ch);

        }
        /*
        while(true)
        {
            int ch = fr.raed();
            if(ch==-1)
                 break;
 
            System.out.print("ch"=+(char)ch);
         }
         */

            fr.close();
    }
}

 

 

文本文件讀取方式二 

第二種方式:經過字符數組進行獲取。

import java.io.*;

class FileReaderDemo
{
    public static void main(String[] args)throws IOException
    {
        
   
        FileReader fr = new FileReader("demo.txt");
        
        //定義一個字符數組,用於儲存讀到的字符。
       //該read(char[])返回的是讀到字符的個數。

        char[] buf = new char[](1024);//一般定義爲1024的整數倍。
        
        int num = 0;

        while((num=fr.read(buf))!=-1)
        {
            System.out.println(new String(buf,0,num));

        }
        fr.close();

 

 

 文本文件讀取練習

練習:讀取一個.java文件,並打印在控制檯上。

 

import java.io.*;

class FileReaderTest
{
    public static void main(String[] args)throws IOException
    {
        
   
        FileReader fr = new FileReader("DateDemo.java");
        

        char[] buf = new char[](1024);
        
        int num = 0;

        while((num=fr.read(buf))!=-1)
        {
//此處不加ln,是由於當文本文件大於1024時,在不應換行的時候卻換行了。 System.out.print(
new String(buf,0,num)); } fr.close();

 

 拷貝文本文件

講C盤一個文本文件複製到D盤

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

步驟:

1,在D盤建立一個文件。用於存儲C盤中的數據。

2,定義一個讀取流和C盤文件關聯。

3,經過不斷的讀寫完成數據存儲。

4,關閉資源。

import java.io.*;

class CopyTest
{
    public static viod main(String[] args)throws IOException
    {
        copy_1();

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

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

        int ch = 0;

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

}

 

 讀取多個字符:

public static viod copy_2();
{
    FileWriter fw = null;
    FileReader fr = null;
    try
    {
        fw = new FileWriter("SystemDemo_copy.txt");
        fr = new FileReader("StstemDemo.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(IOExceprtion e)
            {
                
            }
         if(fw!=null)
            try
            {
                fw.close();
            }
            catch(IOExceprtion e)
            {
                
            }
    }

    }

}

 

。。。。。

相關文章
相關標籤/搜索