Java 常用工具類--輸入輸出流

  • 輸出流


    image.png
  • 輸入流


    image.png

File類

  • File類常用方法
package com.alan.file;

import java.io.File;
import java.io.IOException;
public class FileDemo {
    public static void main(String[] args) {

        // 方式1:創(chuàng)建File對象(即可以創(chuàng)建文件,也可以創(chuàng)建目錄)
        //File file1 = new File("/Users/alan/eclipse-workspace/ThreadFileProj/io/hello.txt");
        // 方式2:創(chuàng)建File對象(即可以創(chuàng)建文件,也可以創(chuàng)建目錄)
        //File file1 = new File("/Users/alan/eclipse-workspace/ThreadFileProj","io/hello.txt");
        // 方式3:創(chuàng)建File對象(即可以創(chuàng)建文件仰禀,也可以創(chuàng)建目錄)
        File file = new File("/Users/alan/eclipse-workspace/ThreadFileProj/io");
        File file1 =  new File(file,"hello.txt");
        //判斷是文件還是目錄
        System.out.println("是否是目錄:"+file1.isDirectory());
        System.out.println("是否是文件:"+file1.isFile());
        //創(chuàng)建目錄
        File file2 = new File("/Users/alan/eclipse-workspace/ThreadFileProj","HashSet");
        if(!file2.exists()) {
            file2.mkdirs();
        }
        //創(chuàng)建文件
        if(!file1.exists()) {
            try {
                file1.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

字節(jié)流

  • 字節(jié)輸入流 InputStream
  • 字節(jié)輸出流 OutputStream
FileInputStream
  • 從文件系統(tǒng)中的某個文件中或者輸入字節(jié)
  • 用于讀取諸如圖像數(shù)據(jù)之類的原始字節(jié)流(如果是字符類型一般使用字符流)


    image.png
  • 案例1
package com.alan.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputDemo1 {

    public static void main(String[] args) {
        // 讀取本項目根目錄的test.txt文件
        File file = new File("test.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
            int n;
            // n為-1時,讀取的末尾
            while ((n = fis.read()) != -1) {
                System.out.print((char) n);
            }
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
  • 案例2
package com.alan.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputDemo2 {

    public static void main(String[] args) {
        // 讀取本項目根目錄的test.txt文件
        File file = new File("test.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
            //通過byte數(shù)組進行讀操作
            byte[] b = new byte[200];
            fis.read(b);
            System.out.print(new String(b));
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

FileOutputStream
  • 案例
package com.alan.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo2 {

    public static void main(String[] args) {
        // 文件拷貝
        try {
            // FileInputStream實例化恒序,為原文件
            FileInputStream fis = new FileInputStream("12345.jpg");
            // FileOutputStream實例化歧胁,為拷貝的新文件
            FileOutputStream fos = new FileOutputStream("12345copy.jpg");
            int n = 0;
            // 定義大小為1kb的數(shù)組
            byte[] b = new byte[1024];
            // 通過FileInputStream將文件讀取与帆,并保存在byte數(shù)組b中
            // 通過FileOutputStream寫文件玄糟,實現(xiàn)拷貝袄秩。
            // n代表實際讀取到的字節(jié)的個數(shù)之剧。用另一個write方法實現(xiàn),保證拷貝后的文件大小與之前的一致
            while ((n = fis.read(b)) != -1) {
                // fos.write(b);
                fos.write(b, 0, n);
            }
            fis.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

緩沖流

  • 緩沖輸入流 BufferedInputStream
  • 緩沖輸出流 BufferedOutputStream
  • 使用緩沖流贰军,可以提高讀寫速度词疼。需要與文件輸入輸出流配合使用贰盗。

flush() 當緩沖區(qū)不滿的時候,需要使用此方法強制輸出

  • 案例
package com.alan.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedDemo {

    public static void main(String[] args) {

        try {
            // 緩沖輸出流實例化舵盈,將文件輸出流的對象賦值給緩沖輸出流的構造函數(shù)
            FileOutputStream fos = new FileOutputStream("test.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            // 緩沖輸入流實例化秽晚,將文件輸入流的對象賦值給緩沖輸出流的構造函數(shù)
            FileInputStream fis = new FileInputStream("test.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);
            bos.write(50);
            bos.write('a');
            // 清空緩沖區(qū)爆惧,將數(shù)據(jù)寫入扯再,如果不調(diào)用flush方法,最后用close方法也可以達到效果斋竞,但一般還是將flush方法寫上坝初。
            bos.flush();
            System.out.println(bis.read());
            System.out.println((char)bis.read());
            fos.close();
            bos.close();
            fis.close();
            bis.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

字符流

  • 字符輸入流Reader
  • 字符輸出流Writer
字節(jié)字符轉換流
  • InputStreamReader 其中InputStream是字節(jié)輸入流的父類 Reader是字符輸入流的父類
  • OutputStreamWriter 其中OutputStream是字節(jié)輸出流的父類 Writer是字符輸出流的父類
  • 案例
package com.alan.charstream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class ReaderDemo {

    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("test.txt");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
            FileOutputStream fos = new FileOutputStream("test1.txt");
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            BufferedWriter bw = new BufferedWriter(osw);
            //方式1
            int n = 0;
//          while((n = isr.read())!= -1) {
//              System.out.print((char)n);
//          }
            //方式2
            char[] cbuf = new char[10];
            while((n = br.read(cbuf))!= -1) {
                bw.write(cbuf, 0, n);
                bw.flush();
            }
            fis.close();
            isr.close();
            fos.close();
            osw.close();
            br.close();
            bw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


對象序列化

1鳄袍、創(chuàng)建一個類拗小,實現(xiàn)Serializable接口
2樱哼、創(chuàng)建對象
3搅幅、將對象寫入文件
4茄唐、從文件讀取對象信息

  • 對象輸入流ObjectInputStream
  • 對象輸出流ObjectOutputStream
  • Goods類
package com.alan.serial;

import java.io.Serializable;

public class Goods implements Serializable {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    //屬性:商品編號沪编、商品名稱、商品價格
    private String goodsId;
    private String goodsName;
    private double price;
    
    
    //帶參構造
    public Goods(String goodsId, String goodsName, double price) {
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.price = price;
    }
    
    
    public String getId() {
        return goodsId;
    }
    public void setId(String goodsId) {
        this.goodsId = goodsId;
    }
    public String getName() {
        return goodsName;
    }
    public void setName(String goodsName) {
        this.goodsName = goodsName;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }


    @Override
    public String toString() {
        return "商品編號:" + goodsId + ", 商品名稱:" + goodsName + ", 商品價格:" + price;
    }

}

  • 測試類
package com.alan.serial;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class GoodsTest {

    public static void main(String[] args) {
        // 定義Goods類的對象
        Goods goods1 = new Goods("gd001","電腦",3000);
        try {
            //寫文件
            FileOutputStream fos = new FileOutputStream("test.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            //讀文件
            FileInputStream fis = new FileInputStream("test.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            oos.writeObject(goods1);
            oos.flush();
            //讀到對象存放
            Goods goods = (Goods)ois.readObject();
            System.out.println(goods);
            fis.close();
            ois.close();
            oos.close();
            fos.close();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纳令,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子圈匆,更是在濱河造成了極大的恐慌捏雌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件满败,死亡現(xiàn)場離奇詭異叹括,居然都是意外死亡,警方通過查閱死者的電腦和手機净嘀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門挖藏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膜眠,“玉大人袁翁,你說我怎么就攤上這事粱胜『鳎” “怎么了抑钟?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵在塔,是天一觀的道長蛔溃。 經(jīng)常有香客問我,道長徽曲,這世上最難降的妖魔是什么秃臣? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任奥此,我火速辦了婚禮,結果婚禮上傻铣,老公的妹妹穿的比我還像新娘祥绞。我一直安慰自己蜕径,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朴皆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遂铡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天伪货,我揣著相機與錄音碱呼,去河邊找鬼愚臀。 笑死姑裂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的炭分。 我是一名探鬼主播剑肯,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捧毛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起呀忧,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤师痕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后而账,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰坟,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年泞辐,在試婚紗的時候發(fā)現(xiàn)自己被綠了笔横。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡咐吼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厢塘,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布涣易,位于F島的核電站步氏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏界阁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一写穴、第九天 我趴在偏房一處隱蔽的房頂上張望偿短。 院中可真熱鬧披泪,春花似錦控硼、人聲如沸幔妨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姥饰,卻和暖如春栅螟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吃媒。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拱礁,地道東北人鸯乃。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓奖年,卻偏偏與公主長得像揍堰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子季希,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 概述 java.io 包幾乎包含了所有操作輸入偏窝、輸出需要的類祭往。所有這些流類代表了輸入源和輸出目標火窒。java.io ...
    Steven1997閱讀 9,194評論 1 25
  • 棵棵挺直的枯木已骇, 儼然你已成為山頂?shù)娘L景。 你刺痛了天空的眼睛票编, 人們在你面前思考疾捍, 我也跟你一樣失去乱豆!
    簡村小吹閱讀 177評論 5 5
  • 最近魔都什么感覺?一個字“熱”刃跛,力盡不知熱,但惜夏日長藐俺,魔都人的朋友圈曬的都是汗噠噠滴~又到了老公跑了都不想追的季...
    孫苗苗sunny閱讀 232評論 0 0
  • 我們通過指針,可以簡化一些C編程任務的執(zhí)行泥彤,還有一些任務欲芹,如動態(tài)內(nèi)存分配,沒有指針是無法執(zhí)行的吟吝。所以菱父,學習指針是很...
    從夢流風閱讀 404評論 0 1
  • 今天下午浙宜,我在后面病房加了一個霧化,向治療車走去蛹磺,看到我老師拿著裝血的試管粟瞬,老師說,新入院一個病人萤捆,是一個八歲的大...
    半夏畏生姜閱讀 414評論 1 1