1. 程式人生 > >字節流, FileOutputStream類,FileInputStream類,復制文件,字符流

字節流, FileOutputStream類,FileInputStream類,復制文件,字符流

不可 分享 不刷新 get 關閉流 color .get 繼續 str

字節輸出流OutputStream

OutputStream此抽象類,是表示輸出字節流的所有類的超類。操作的數據都是字節

基本方法:

技術分享圖片

子類可繼承調用以上方法

FileOutputStream類

構造方法:

技術分享圖片

FileOutputStream類寫入數據到文件中

例子:

package com.oracle.FileoutStream;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutPUTsteam {

    public static void
main(String[] args) throws IOException { FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt");//此構造方法,如果文件存在,則覆蓋 //沒有,則創建 // f.write(100);//字節流,結果為d,想輸出100,就寫三個字節,49,48,48 byte[] bytes={-65,-66,-67,-68};//烤郊 // byte[] bytes={65,66,67,68};//ABCD
// f.write(bytes); f.write(bytes,1,2);// /* FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt",true);//在後面續寫,加true // f.write(bytes,1,2);//窘 String str="abcd\r\n";//\r\n換行 f.write(str.getBytes()); // new String(bytes); */ f.close(); } }

IO異常的處理

package com.oracle.FileoutStream;

import java.io.FileOutputStream;
import java.io.IOException;

public class IoEXCEPTION {

    public static void main(String[] args) {
        //定義FileOutputStream的引用
        FileOutputStream f=null;
        try{
            //創建FileOutputStream對象
                f=new FileOutputStream("e:\\test\\bi.txt");
                //寫數據
                f.write(100);
        }catch(IOException e){
            throw new RuntimeException("文件寫入失敗");//一旦發生io異常,直接終止關閉
        }finally{
            try {
                //一定要判斷fos是否為null,只有不為null時,才可以關閉資源
                if(f!=null){
                    f.close();
                }
            } catch (IOException e) {
                throw new RuntimeException("關閉資源失敗");
            }
        }
    
    
    
    }

}

字節輸入流InputStream

技術分享圖片

int read():讀取一個字節並返回,沒有字節返回-1.

int read(byte[]): 讀取一定量的字節數,並存儲到字節數組中,返回讀取到的字節數。

FileInputStream類

技術分享圖片

FileInputStream類讀取數據read方法

技術分享圖片

public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("c:\\file.txt");
        //創建一個字節輸入流對象,必須明確數據源,其實就是創建字節讀取流和數據源相關聯。
        FileInputStream fis = new FileInputStream(file);
        //讀取數據。使用 read();一次讀一個字節。
        int ch = 0;
        while((ch=fis.read())!=-1){
            System.out.println("ch="+(char)ch);
        }

        // 關閉資源。
        fis.close();
    }
}

讀取數據read(byte[])方法

技術分享圖片

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
         * 演示第二個讀取方法, read(byte[]);
         */
        File file = new File("c:\\file.txt");
        // 創建一個字節輸入流對象,必須明確數據源,其實就是創建字節讀取流和數據源相關聯。
        FileInputStream fis = new FileInputStream(file);        
        //創建一個字節數組。
        byte[] buf = new byte[1024];//長度可以定義成1024的整數倍。        
        int len = 0;
        while((len=fis.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
        fis.close();
    }
}

字節流復制文件

技術分享圖片

public class CopyFileTest {
    public static void main(String[] args) throws IOException {
        //1,明確源和目的。
        File srcFile = new File("c:\\YesDir\test.JPG");
        File destFile = new File("copyTest.JPG");
        
        //2,明確字節流 輸入流和源相關聯,輸出流和目的關聯。
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);
        
        //3, 使用輸入流的讀取方法讀取字節,並將字節寫入到目的中。
        int ch = 0;
        while((ch=fis.read())!=-1){
            fos.write(ch);
        }
        //4,關閉資源。
        fos.close();
        fis.close();
    }
}

緩沖數組方式復制文件

public class CopyFileByBufferTest {
    public static void main(String[] args) throws IOException {
        File srcFile = new File("c:\\YesDir\test.JPG");
        File destFile = new File("copyTest.JPG");
        // 明確字節流 輸入流和源相關聯,輸出流和目的關聯。
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);
        //定義一個緩沖區。
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = fis.read(buf)) != -1) {
            fos.write(buf, 0, len);// 將數組中的指定長度的數據寫入到輸出流中。
        }
        // 關閉資源。
        fos.close();
        fis.close();
    }
}

這樣執行速度比一個一個讀寫要快

字符流

FileReader讀取包含中文的文件

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
        //給文件中寫中文
        writeCNText();
        //讀取文件中的中文
        readCNText();
    }    
    //讀取中文
    public static void readCNText() throws IOException {
        FileReader fr = new FileReader("D:\\test\\cn.txt");
        int ch = 0;
        while((ch = fr.read())!=-1){
            //輸出的字符對應的編碼值
            System.out.println(ch);
            //輸出字符本身
            System.out.println((char)ch);
        }
    }
    //寫中文
    public static void writeCNText() throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");
        fos.write("歡迎你".getBytes());
        fos.close();
    }
}

FileWriter寫入中文到文件中

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //演示FileWriter 用於操作文件的便捷類。
        FileWriter fw = new FileWriter("d:\\text\\fw.txt");
        fw.write("你好謝謝再見");//這些文字都要先編碼。都寫入到了流的緩沖區中。
        fw.flush();
        fw.close();
    }
}

flush和close的區別

技術分享圖片

  flush():將流中的緩沖區緩沖的數據刷新到目的地中,刷新後,流還可以繼續使用。

  close():關閉資源,但在關閉前會將緩沖區中的數據先刷新到目的地,否則丟失數據,然後在關閉流。流不可以使用。如果寫入數據多,一定要一邊寫一邊刷新,最後一次可以不刷新,由close完成刷新並關閉。

字符流復制文本文件

public class CopyTextFileTest {
    public static void main(String[] args) throws IOException {
        copyTextFile();
    }
    public static void copyTextFile() throws IOException {
        //1,明確源和目的。
        FileReader fr = new FileReader("c:\\cn.txt");
        FileWriter fw = new FileWriter("c:\\copy.txt");
        //2,為了提高效率。自定義緩沖區數組。字符數組。
        char[] buf = new char[1024];
        int len = 0;
        while((len=fr.read(buf))!=-1){
            fw.write(buf,0,len);
        }
        /*2,循環讀寫操作。效率低。
        int ch = 0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        */
        //3,關閉資源。
        fw.close();
        fr.close();
    }
}

字節流, FileOutputStream類,FileInputStream類,復制文件,字符流