亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

新手小白看過來學(xué)JAVA必過IO流File字節(jié)流字符流

 更新時(shí)間:2021年08月18日 15:01:04   作者:程序媛泡泡  
這篇文章主要介紹了新手小白學(xué)JAVA到IO流File字節(jié)流字符流的重點(diǎn),對流不清楚的新手同學(xué)快進(jìn)來學(xué)習(xí)吧,大佬也可以進(jìn)來溫故一下

IO簡介

1.流Stream

在學(xué)習(xí)IO流之前,我們首先需要學(xué)習(xí)的概念就是Stream流
為了方便理解,我們可以把數(shù)據(jù)的讀寫操作抽象成數(shù)據(jù)在"管道"中流動(dòng),但需注意:
1.流只能單方向流動(dòng)
2.輸入流用來讀取 → in
3.輸出流用來寫出 → out
4.數(shù)據(jù)只能從頭到尾順序的讀寫一次
所以以程序的角度來思考,In/out 相對于程序而言的輸入(讀取)/輸出(寫出)的過程.

 

 2.IO流的繼承結(jié)構(gòu)

在java中,根據(jù)處理的數(shù)據(jù)單位不同,可以把流分為字節(jié)流和字符流
字節(jié)流 : 針對二進(jìn)制文件
字符流 : 針對文本文件,讀寫容易出現(xiàn)亂碼的現(xiàn)象,在讀寫時(shí),最好指定編碼集為UTF-8
在結(jié)合對應(yīng)類型的輸入和輸出方向,常用的流有:

File
字節(jié)流:針對二進(jìn)制文件
InputStream
FileInputStream
BufferedInputStream
ObjectInputStream
OutputStream
FileOutputStream
BufferedOutputStream
ObjectOutputStream
字符流:針對文本文件
Reader
FileReader
BufferedReader
InputStreamReader
Writer
FileWriter
BufferedWriter
OutputStreamWriter
PrintWriter一行行寫出

3 File文件類

3.1概述

封裝一個(gè)磁盤路徑字符串,對這個(gè)路徑可以執(zhí)行一次操作
可以封裝文件路徑、文件夾路徑、不存在的路徑

3.2創(chuàng)建對象

File(String pathname)通過將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建一個(gè)新的File實(shí)例
new File(“d:/abc/a.txt”);
new File(“d:/abc”,”a.txt”);

3.3常用方法

 

 3.4 練習(xí):測試常用方法

創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestFile.java

package cn.tedu.file;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

/*本類用來測試文件類 File*/
public class TestFile {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建File文件對象
        /*1.構(gòu)造函數(shù)的參數(shù)是String類型的pathname(路徑名)
        * 這個(gè)路徑可以是文件路徑,也可以是文件夾路徑*/
        /*2.\在代碼中有特殊的意義,所以想要真正表示這是一個(gè)\,需要用\進(jìn)行轉(zhuǎn)義*/
        //注意:此處需要自己手動(dòng)在D盤創(chuàng)建對應(yīng)目錄下的1.txt,并添加內(nèi)容
        //注意:創(chuàng)建1.txt時(shí),需要設(shè)置系統(tǒng)顯示文件后綴名,如果沒設(shè)置,文件名應(yīng)該是1
        //注意:File需要導(dǎo)包:import java.io.File;
        File file = new File("D:\\ready\\1.txt");

        //2.測試常用方法
        //2.1文件與文件夾屬性測試
        System.out.println(file.length());//12,獲取指定文件的字節(jié)量大小
        System.out.println(file.exists());//true,判斷指定文件是否存在
        System.out.println(file.isFile());//true,判斷指定內(nèi)容是否為文件
        System.out.println(file.isDirectory());//false,判斷指定內(nèi)容是否為文件夾
        System.out.println(file.getName());//1.txt,獲取指定內(nèi)容的名字
        System.out.println(file.getParent());//D:\ready,獲取指定內(nèi)容的上級
        System.out.println(file.getAbsolutePath());//D:\ready\1.txt,獲取指定內(nèi)容的絕對路徑

        //2.2創(chuàng)建與刪除
        file = new File("D:\\ready\\2.txt");
        /*如果指定創(chuàng)建文件的文件夾不存在,會(huì)報(bào)錯(cuò):java.io.IOException
        * 系統(tǒng)找不到指定的路徑,由于可能會(huì)發(fā)生異常,所以調(diào)用時(shí)需要拋出異常 */
        //在windows中創(chuàng)建不存在的文件2.txt,成功返回true
        System.out.println(file.createNewFile());//true

        file = new File("D:\\ready\\m");
        System.out.println(file.mkdir());//true,創(chuàng)建不存在的單層文件夾m
        file = new File("D:\\ready\\a\\b\\c");
        System.out.println(file.mkdirs());//true,創(chuàng)建不存在的多層文件夾a/b/c

        System.out.println(file.delete());//c被刪除,刪除文件或者空文件夾
        file  = new File("D:\\ready\\a");
        System.out.println(file.delete());//false,因?yàn)閍目錄里還有b目錄
        file  = new File("D:\\ready\\2.txt");
        System.out.println(file.delete());//true,刪除2.txt文件成功

        //2.3 文件列表測試
        file = new File("D:\\ready");
        String[] listName = file.list();
        System.out.println(Arrays.toString(listName));

        File[] fs = file.listFiles();
        System.out.println(Arrays.toString(fs));
        System.out.println(fs[0].length());

    }
}

4.字節(jié)流讀取

字節(jié)流是由字節(jié)組成的,字符流是由字符組成的.
Java里字符由兩個(gè)字節(jié)組成.字節(jié)流是基本流,主要用在處理二進(jìn)制數(shù)據(jù)。
所以字節(jié)流是比較常用的,可以可以處理多種不同種類的文件,比如文本文檔/音頻/視頻等等

4.1 InputStream抽象類

此抽象類是表示字節(jié)輸入流的所有類的超類/抽象類,不可創(chuàng)建對象哦

 常用方法:
abstract int read() 從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)
int read(byte[] b) 從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組 b 中
int read(byte[] b, int off, int len) 將輸入流中最多 len 個(gè)數(shù)據(jù)字節(jié)讀入 byte 數(shù)組,off表示存時(shí)的偏移量
void close() 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源

 4.2 FileInputStream子類

直接插在文件上,直接讀取文件數(shù)據(jù)

 創(chuàng)建對象
FileInputStream(File file)—直接傳文件對象
通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的 File 對象 file 指定FileInputStream(String pathname)—傳路徑
通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的路徑名 name 指定

 4.3 BufferedInputStream子類

BufferedInputStream 為另一個(gè)輸入流添加一些功能,在創(chuàng)建BufferedInputStream 時(shí),會(huì)創(chuàng)建一個(gè)內(nèi)部緩沖區(qū)數(shù)組(默認(rèn)8k大小)。在讀取或跳過流中的字節(jié)時(shí),可根據(jù)需要從包含的輸入流再次填充該內(nèi)部緩沖區(qū),一次填充多個(gè)字節(jié)。

創(chuàng)建對象
BufferedInputStream(InputStream in)
創(chuàng)建一個(gè) BufferedInputStream 并保存其參數(shù),即輸入流 in,以便將來使用。

4.4 練習(xí):字節(jié)流讀取案例

創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestIn.java

package cn.tedu.file;

import java.io.*;

/*本類用于練習(xí)字節(jié)輸入流*/
public class TestIn {
    public static void main(String[] args) {
        //method();//字節(jié)流的讀取
        method2();//高效字節(jié)流的讀取
    }

    //本方法用于測試高效字節(jié)流的讀取
    private static void method2() {
        //定義一個(gè)在本方法中都生效的局部變量in,注意手動(dòng)初始化,值為null
        InputStream in = null;
        try {
            //1.創(chuàng)建高效字節(jié)輸入流對象
//            InputStream in = new BufferedInputStream(
//                    new FileInputStream(new File("E:\\ready\\1.txt")));
              in = new BufferedInputStream
                      (new FileInputStream("E:\\ready\\1.txt"));
            //2.使用流進(jìn)行讀取
            int b;
            while ((b= in.read())!= -1){
                System.out.println(b);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {//關(guān)流操作寫在finally{}中
            //3.流用完以后一定要關(guān)閉?。?!
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

    //本方法用于測試字節(jié)流的讀取
    private static void method() {
        //創(chuàng)建一個(gè)在本方法都生效的局部變量注意手動(dòng)初始化
        InputStream in = null;
        try {
            //1.創(chuàng)建字節(jié)輸入流對象用于讀取
            //InputStream in = new InputStream();//報(bào)錯(cuò)原因:抽象類不可實(shí)例化
            //InputStream in = new FileInputStream(new File("E:\\ready\\1.txt"));
            in = new FileInputStream("E:\\ready\\1.txt");
            //2.開始讀取
            /*read()每次調(diào)用都會(huì)讀取一個(gè)字節(jié),如果讀到了數(shù)據(jù)的末尾,返回-1*/
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
            //需求:需要循環(huán)讀取文件中的所有內(nèi)容,直至讀完
            //定義變量,記錄讀到的數(shù)據(jù)
            int b;
            while((b=in.read())!= -1){
                System.out.println(b);
            }
        } catch (Exception e) {
            e.printStackTrace();//打印錯(cuò)誤信息
        /*try-catch結(jié)構(gòu)中的第三個(gè)部分:finally{}
        * 這部分不論是否捕獲到異常,是一定會(huì)被執(zhí)行到的代碼,常用于關(guān)流*/
        }finally {
            try {
                //3.釋放資源,流資源用完必須釋放!??!
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

5.字符流讀取

常用于處理純文本數(shù)據(jù)

5.1 Reader抽象類

用于讀取字符流的抽象類。

常用方法:
int read() 讀取單個(gè)字符
int read(char[] cbuf) 將字符讀入數(shù)組
abstract int read(char[] cbuf, int off, int len) 將字符讀入數(shù)組的某一部分
int read(CharBuffer target) 試圖將字符讀入指定的字符緩沖區(qū)
abstract void close() 關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源

5.2 FileReader子類

用來讀取字符文件的便捷類。此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是適當(dāng)?shù)?。要自己指定這些值,可以先在 FileInputStream 上構(gòu)造一個(gè) InputStreamReader。

創(chuàng)建對象
FileReader(String fileName) 在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個(gè)新 FileReader
FileReader(File file) 在給定從中讀取數(shù)據(jù)的 File 的情況下創(chuàng)建一個(gè)新 FileReader

5.3 BufferedReader子類

從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。
可以指定緩沖區(qū)的大小,或者可使用默認(rèn)的大小。大多數(shù)情況下,默認(rèn)值就足夠大了。

創(chuàng)建對象
BufferedReader(Reader in) 創(chuàng)建一個(gè)使用默認(rèn)大小輸入緩沖區(qū)的緩沖字符輸入流

5.4 練習(xí):字符流讀取案例

創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestIn2.java

package cn.tedu.file;

import java.io.*;

/*本類用于測試字符流的讀取*/
public class TestIn2 {
    public static void main(String[] args) {
        //method();//測試普通字符輸入流
        method2();//測試高效字符輸入流
    }
    //創(chuàng)建一個(gè)用于測試高效字符輸入流的方法
    private static void method2() {
        //1.定義一個(gè)在本方法都生效的局部變量,手動(dòng)初始化值null
        Reader in=null;
        try{
            //1.創(chuàng)建高效字符讀取流對象
            //in = new BufferedReader(new FileReader(new File("E:\\ready\\1.txt")));
            in = new BufferedReader(new FileReader("E:\\ready\\1.txt"));
            //2.使用流對象
            int b;
            while((b=in.read())!=-1){
                System.out.println(b);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //3.關(guān)閉流對象
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //創(chuàng)建一個(gè)用于測試普通字符輸入流的方法
    private static void method() {
        //1.1創(chuàng)建一個(gè)在本方法中都生效的局部變量,注意初始化值null
        Reader in = null;
        try {
            //1.2創(chuàng)建字符輸入流對象,注意需要捕獲異常
            //Reader in = new Reader();//報(bào)錯(cuò)原因:抽象父級不可實(shí)例化
            //in = new FileReader(new File("E:\\ready\\1.txt"));
            in = new FileReader("E:\\ready\\1.txt");
            //2.使用流對象
            //System.out.println(in.read());
            //需求:循環(huán)讀取文件中的所有內(nèi)容,只要不是-1,就說明還有數(shù)據(jù),繼續(xù)讀取
            //3.1定義變量,記錄讀取到的數(shù)據(jù)
            int b;
            while((b = in.read())!= -1){
                System.out.println(b);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {//3.關(guān)流
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 6.字節(jié)流寫出

6.1 OutputStream抽象類

此抽象類是表示輸出字節(jié)流的所有類的超類.輸出流接受輸出字節(jié)并將這些字節(jié)發(fā)送到某個(gè)接收器.

常用方法:
Void close() 關(guān)閉此輸出流并釋放與此流相關(guān)的所有系統(tǒng)資源
Void flush() 刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)
Void write(byte[ ] b) 將b.length個(gè)字節(jié)從指定的byte數(shù)組寫入此輸出流
Void write(byte[ ] b,int off ,int len) 將指定byte數(shù)組中從偏移量off開始的len個(gè)字節(jié)寫入輸出流
Abstract void write(int b) 將指定的字節(jié)寫入此輸出流

6.2 FileOutputStream 子類

直接插在文件上,直接寫出文件數(shù)據(jù)

構(gòu)造方法(創(chuàng)建對象):
FileOutputStream(String name)
創(chuàng)建一個(gè)向具有指定名稱的文件中寫入數(shù)據(jù)的文件輸出流
FileOutStream(File file)
創(chuàng)建一個(gè)向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流
FileOutStream(File file,boolean append)—如果第二個(gè)參數(shù)為true,表示追加,不覆蓋
創(chuàng)建一個(gè)向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流,后面的參數(shù)是指是否覆蓋原文件內(nèi)容

6.3 BufferedOutputstream 子類

該類實(shí)現(xiàn)緩沖的輸出流,通過設(shè)置這種輸出流,應(yīng)用程序就可以將各個(gè)字節(jié)寫入底層輸出流中,而不必每次針對字節(jié)寫出調(diào)用底層系統(tǒng)

構(gòu)造方法(創(chuàng)建對象):
BufferedOutputStream(OutputStream out)
創(chuàng)建一個(gè)新的緩沖輸出流,用以將數(shù)據(jù)寫入指定的底層輸出流

6.4 練習(xí): 字節(jié)輸出流測試:

創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestOut.java

package cn.tedu.file;

import java.io.*;

/*本類用于測試字節(jié)輸出流*/
public class TestOut {
    public static void main(String[] args) {
        method();//用于測試普通字節(jié)輸出流
        //method2();//用于測試高效字節(jié)輸出流
    }
    //創(chuàng)建一個(gè)用于測試高效字節(jié)輸出流的方法
    private static void method2() {
        //1.創(chuàng)建一個(gè)在本方法都生效的局部變量,注意手動(dòng)初始化
        OutputStream out = null;
        try{
            //2.創(chuàng)建高效字節(jié)輸出流對象
//          out = new BufferedOutputStream(new FileOutputStream(new File("E:\\ready\\2.txt")));
            out = new BufferedOutputStream(new FileOutputStream("E:\\ready\\2.txt"));
            //3.使用流對象--進(jìn)行寫出操作
            out.write(97);
            out.write(97);
            out.write(97);
        }catch (Exception e){
            e.printStackTrace();
        }finally {//關(guān)流操作要放在finally{}中
            try {
                //4.關(guān)流
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //創(chuàng)建一個(gè)用于測試普通字節(jié)輸出流的方法
    private static void method() {
        //1.創(chuàng)建一個(gè)在本方法中都生效的局部變量,注意手動(dòng)初始化null
        OutputStream out = null;
        //2.創(chuàng)建try-catch-finally結(jié)構(gòu),因?yàn)镮O操作可能會(huì)產(chǎn)生異常
        try{
            //3.創(chuàng)建普通字節(jié)輸出流對象
            //out = new FileOutputStream(new File("E:\\ready\\2.txt"));
            //out = new FileOutputStream("E:\\ready\\2.txt");
            out = new FileOutputStream("E:\\ready\\2.txt",true);
            //4.使用流對象--進(jìn)行寫出操作
            out.write(99);//對應(yīng)ASCII碼表中的a
            out.write(99);//對應(yīng)ASCII碼表中的b
            out.write(99);//對應(yīng)ASCII碼表中的c
        }catch (Exception e){
            e.printStackTrace();
        }finally {//如果想要代碼一定會(huì)執(zhí)行,需要寫在finally中
            try {
                //5.關(guān)流操作
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

7.字符流寫出

7.1 Writer 抽象類

寫入字符流的抽象類

常用方法:
Abstract void close() 關(guān)閉此流,但要先刷新它
Void write(char[ ] cbuf) 寫入字符數(shù)組
Void write(int c) 寫入單個(gè)字符
Void write(String str) 寫入字符串
Void write(String str,int off,int len) 寫入字符串的某一部分
Abstract void write(char[] cbuf,int off,int len)寫入字符數(shù)組的某一部分

7.2 FileWriter 子類

用來寫入字符文件的便捷類,此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是可接受的.如果需要自己自定義這些值,可以先在FileOutputStream上構(gòu)造一個(gè)OutputStreamWriter.

構(gòu)造方法(創(chuàng)建對象):
FileWriter(String filename)
根據(jù)給定的文件名構(gòu)造一個(gè)FileWriter對象
FileWriter(String filename,boolean append)
根據(jù)給定的文件名以及指示是否附加寫入數(shù)據(jù)的boolean值來構(gòu)造FileWriter

7.3 BufferedWriter子類

將文本寫入字符輸出流,緩沖各個(gè)字符,從而提供單個(gè)字符,數(shù)組和字符串的高效寫入.可以指定緩沖區(qū)的大小,或者接受默認(rèn)的大小,在大多數(shù)情況下,默認(rèn)值就足夠大了

構(gòu)造方法(創(chuàng)建對象):
BufferedWriter(Writer out)
創(chuàng)建一個(gè)使用默認(rèn)大小輸出緩沖區(qū)的緩沖字符輸出流

7.4 練習(xí): 字符輸出流測試:

創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestOut2.java

package cn.tedu.file;

import java.io.*;

/*本類用于測試字符輸出流*/
public class TestOut2 {
    public static void main(String[] args) {
        //method();//用于測試普通字符輸出流
        method2();//用于測試高效字符輸出流
    }
    //創(chuàng)建一個(gè)用于測試高效字符輸出流的方法
    private static void method2() {
        //1.創(chuàng)建一個(gè)在本方法都生效的局部變量,值為null,注意手動(dòng)初始化?。?!
        Writer out = null;
        //2.由于程序可能會(huì)拋出異常,所以需要寫一個(gè)try-catch-finally結(jié)構(gòu)
        try{//存放可能會(huì)拋出異常的代碼
            //3.創(chuàng)建普通字符輸出流對象
            //out = new BufferedWriter(new FileWriter(new File("E:\\ready\\2.txt")));
            //out = new BufferedWriter(new FileWriter("E:\\ready\\2.txt"));
            out = new BufferedWriter(new FileWriter("E:\\ready\\2.txt",true));
            //4.使用流對象
            out.write(100);
            out.write(100);
            out.write(100);
            out.write(100);
            out.write(100);
        }catch (Exception e){//匹配并捕獲異常
            e.printStackTrace();//如果捕獲到異常就打印錯(cuò)誤信息
        }finally {//一定會(huì)被執(zhí)行到的代碼塊,常用于關(guān)流
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //創(chuàng)建一個(gè)用于測試普通字符輸出流的方法
    private static void method() {
        //1.創(chuàng)建一個(gè)在本方法都生效的局部變量,值為null,注意手動(dòng)初始化!??!
        Writer out = null;
        //2.由于程序可能會(huì)拋出異常,所以需要寫一個(gè)try-catch-finally結(jié)構(gòu)
        try{//存放可能會(huì)拋出異常的代碼
            //3.創(chuàng)建普通字符輸出流對象
            //out = new FileWriter(new File("E:\\ready\\2.txt"));
            //out = new FileWriter("E:\\ready\\2.txt");
            out = new FileWriter("E:\\ready\\2.txt",true);
            //4.使用流對象
            out.write(98);
            out.write(98);
            out.write(98);
            out.write(98);
        }catch (Exception e){//匹配并捕獲異常
            e.printStackTrace();//如果捕獲到異常就打印錯(cuò)誤信息
        }finally {//一定會(huì)被執(zhí)行到的代碼塊,常用于關(guān)流
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

8.拓展

通過學(xué)習(xí)以上的幾種流,我們也可以拓展嘗試做下文件的復(fù)制:
創(chuàng)建包: cn.tedu.file
創(chuàng)建類: TestCopyFile.java

package cn.tedu.file;

import java.io.*;
import java.util.Scanner;

/*本類用于練習(xí)文件復(fù)制綜合案例*/
public class TestCopyFile {
    public static void main(String[] args) {
        //1.提示并接收用戶輸入的源文件路徑和目標(biāo)位置
        System.out.println("請您輸入源文件路徑:");
        String f = new Scanner(System.in).nextLine();
        System.out.println("請您輸入目標(biāo)位置:");
        String t = new Scanner(System.in).nextLine();
        //2.調(diào)用方法完成文件的復(fù)制
        //ZFCopy(f,t);//用字符流完成復(fù)制案例
        ZJCopy(f,t);//用字節(jié)流完成復(fù)制案例
    }
    private static void ZJCopy(String f,String t) {
        //1.定義在整個(gè)方法中都生效的局部變量,手動(dòng)初始化值為null
        InputStream in = null;
        OutputStream out = null;
        //2.由于代碼可能會(huì)發(fā)生異常,所以需要try-catch-finally結(jié)構(gòu)
        try{
            //3.1創(chuàng)建高效/緩沖字節(jié)輸入流,參數(shù)是f
            in = new BufferedInputStream(new FileInputStream(f));
            //3.2創(chuàng)建高效/緩沖字節(jié)輸出流,參數(shù)是t
            out = new BufferedOutputStream(new FileOutputStream(t));

            //4.創(chuàng)建好流對象以后就可以通過流對象完成業(yè)務(wù)了
            //4.1定義變量保存讀到的數(shù)據(jù)
            int b;
            //4.2使用循環(huán)完成復(fù)制操作
            while((b=in.read())!=-1){
                out.write(b);
            }
            System.out.println("恭喜您~文件復(fù)制成功~");
        }catch(Exception e){
            System.out.println("很抱歉~文件復(fù)制失敗~");
            e.printStackTrace();
        }finally {
            //5.關(guān)流
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private static void ZFCopy(String f,String t) {
        //1.定義在整個(gè)方法中都生效的局部變量,手動(dòng)初始化值為null
        Reader in = null;
        Writer out = null;
        //2.由于代碼可能會(huì)發(fā)生異常,所以需要try-catch-finally結(jié)構(gòu)
        try{
            //3.1創(chuàng)建高效/緩沖字符輸入流,傳入的參數(shù)是源文件的路徑
            in = new BufferedReader(new FileReader(f));
            //3.2創(chuàng)建高效/緩沖字符輸出流,傳入的參數(shù)是目標(biāo)文件的路徑
            out = new BufferedWriter(new FileWriter(t));

            //4.拿到流對象以后,就可以使用流對象來完成業(yè)務(wù)了
            //4.1定義變量用來記錄讀到的數(shù)據(jù)
            int b;
            //4.2循環(huán)讀取目標(biāo)文件,直到返回值為-1,沒有數(shù)據(jù)時(shí)結(jié)束循環(huán)
            while((b=in.read())!=-1){
                out.write(b);/*將本次循環(huán)從源文件讀到的內(nèi)容寫出到目標(biāo)文件中*/
            }
            System.out.println("恭喜您!文件復(fù)制成功!");
        }catch (Exception e){
            System.out.println("很抱歉!文件復(fù)制失??!");
            e.printStackTrace();
        }finally {
            /*關(guān)流是有順序的:如果有多個(gè)流,最后創(chuàng)建的流最先關(guān)閉
            * 多條關(guān)流語句需要各自try-catch*/
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

9.總結(jié):IO的繼承結(jié)構(gòu)

1.主流分類

1.按照方向進(jìn)行分類:輸入流 輸出流(相對于程序而言,從程序?qū)憯?shù)據(jù)到文件中是輸出)
2.按照傳輸類型進(jìn)行分類:字節(jié)流 字符流
3.組合: 字節(jié)輸入流 字節(jié)輸出流 字符輸入流 字符輸出流

2.學(xué)習(xí)方法:在抽象父類中學(xué)習(xí)通用的方法,在子類中學(xué)習(xí)如何創(chuàng)建對象

3.字節(jié)輸入流:

InputStream 抽象類,不能new,可以作為超類,學(xué)習(xí)其所提供的共性方法

--FileInputStream 子類,操作文件的字節(jié)輸入流,普通類
--BufferedInputStream 子類,緩沖字節(jié)輸入流,普通類

4.字符輸入流

Reader 抽象類,不能new,可以作為超類,學(xué)習(xí)其所提供的共性方法

--FileReader,子類,操作文件的字符輸入流,普通類
--BufferedReader,子類,緩沖字符輸入流,普通類

5.字節(jié)輸出流:

OutputStream 抽象類,不能new,可以作為超類,學(xué)習(xí)其所提供的共性方法

--FileOutputStream 子類,操作文件的字節(jié)輸出流,普通類
--BufferedOutputStream 子類,緩沖字節(jié)輸出流,普通類

6.字符輸出流

Writer 抽象類,不能new,可以作為超類,學(xué)習(xí)其所提供的共性方法

--FileWriter,子類,操作文件的字符輸出流,普通類
--BufferedWriter,子類,緩沖字符輸出流,普通類

到此這篇關(guān)于新手小白看過來學(xué)JAVA必過IO流File字節(jié)流字符流的文章就介紹到這了,更多相關(guān)Java的IO流File字節(jié)流字符流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論