javase part21 IO流

在計算機中文件的分類

  • 二進制文件
  • 文本文件

在java中流的分類

  • 字節(jié)流:操作二進制文件
  • 字符流: 操作文本文件

流: stream 系列的都是字節(jié)流

  • InputStream 輸入字節(jié)流的超類
  • OutPutStream 輸出字節(jié)流的超類
  • FileInputStream 文件輸入流,用于從文件中獲得字節(jié)輸入流
  • FileOutputStream 文件輸出流
  • BufferedInputStream InputStream的子類,使用裝飾者模式對FileInputStream進行裝飾
  • BufferedOutputStream
  • DataInputStream:InputStream的子類,使用裝飾者模式對輸入輸出流進行裝飾,將變量輸出到流
  • DataOutputStream: 將數(shù)據(jù)讀出,按照順序讀出
圖片.png

字節(jié)流使用


圖片.png

使用FIleInput/OutputStream

//使用FileInput / OutputStream
//一個字節(jié)一個字節(jié)搞,太慢,可以使用BufferedInputStream提高速度
@SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream(new File("d:/img/1.mp4"));
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/img/2.mp4"));
            int len = -1;
            while ((len = fileInputStream.read())!=-1) {
                fileOutputStream.write(len);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
拷貝一個100M的視頻所需時間(未使用緩存).png

使用BufferedInput/OutputStream ,這個類自帶buff 為8K

@SuppressWarnings("resource")
    public static void main(String[] args) {
        try {
            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("d:/img/1.mp4"));
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("d:/img/2.mp4"));
            int len = -1;
            while ((len=bufferedInputStream.read())!=-1) {
                bufferedOutputStream.write(len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
使用自帶buff的流來拷貝.png

使用DataInput / OutStream
數(shù)據(jù)輸入流允許應用程序以與機器無關(guān)方式從底層輸入流中讀取基本 Java 數(shù)據(jù)類型小槐。應用程序可以使用數(shù)據(jù)輸出流寫入稍后由數(shù)據(jù)輸入流讀取的數(shù)據(jù)。

DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("d:/img/1.txt")));
        dataOutputStream.writeInt(132);
        dataOutputStream.writeDouble(0.01);
        dataOutputStream.writeUTF("這是一個字符串");

//讀取剛才通過DataOutputStream 寫入的數(shù)據(jù)
//要按照寫入的順序讀取
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("d:/img/1.txt")));
        int readInt = dataInputStream.readInt();
        double readDouble = dataInputStream.readDouble();
        String readUTF = dataInputStream.readUTF();
        System.out.println(readInt);
        System.out.println(readDouble);
        System.out.println(readUTF);

使用ObjectInput / OutputStrem 之前,需要將要寫入的對象的類序列化,不然會引發(fā)異常

圖片.png

//將一個student對象寫入

public class Student implements Serializable {
    
    private static final long serialVersionUID = 1L;
    private String name;
    private String address;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
    public Student() {
        super();
    }
    public Student(String name, String address) {
        super();
        this.name = name;
        this.address = address;
    }
}

ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("d:/img/1.abc")));
objectOutputStream.writeObject(student);

//嘗試將對象讀出來
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("d:/img/1.abc")));
Student student2 = (Student) objectInputStream.readObject();
System.out.println(student2);

字符流使用
通過字符流可以很方便的將字符寫入writer

圖片.png

使用BufferedWriter/Reader
使用完Buffered后如果沒有flush和close,數(shù)據(jù)將不會被寫入進文件

//bufferWriter 若目標文件不存在,會自動創(chuàng)建文件
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("d:/img/2.abc"))));     
bufferedWriter.write("這個是一個字符串");
bufferedWriter.write("qweasd");
            
bufferedWriter.flush();
bufferedWriter.close();


//使用BufferedReader來將數(shù)據(jù)讀出
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("d:/img/2.abc")));

String string = null;
StringBuilder stringBuilder = new StringBuilder();
            
while ((string = bufferedReader.readLine())!=null) {
        stringBuilder.append(string);
}

使用FileWriter/Reader
若文件不存在,將自動創(chuàng)建文件

FileWriter fileWriter = new FileWriter(new File("d:/img/2.txt"));
fileWriter.write("這是一個字符串");
fileWriter.write("\n");
fileWriter.write("這是一個字符串2哦");
            
fileWriter.flush();
fileWriter.close();

//讀取數(shù)據(jù)
FileReader fileReader = new FileReader(new File("d:/img/2.txt"));
int len = -1;
StringBuilder stringBuilder = new StringBuilder();
char[] buff = new char[512];
while ((len = fileReader.read(buff)) != -1) {
    stringBuilder.append(buff, 0, len);
}
System.out.println(stringBuilder);

使用OutputStreamWriter/InputStreamReader
如果目標文件不存在,將會創(chuàng)建文件


圖片.png
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("d:/img/3.txt"));
        outputStreamWriter.write("這是一個男字符串");
        outputStreamWriter.write("這是一個女字符串");

        outputStreamWriter.flush();
        outputStreamWriter.close();
        
      //讀取數(shù)據(jù)
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d:/img/3.txt"));
        int len = -1;
        char[] buff = new char[512];
        StringBuilder sBuilder = new StringBuilder();
        while ((len = inputStreamReader.read(buff))!=-1) {
            sBuilder.append(buff,0,len);
            
        }
        System.out.println(sBuilder);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末重绷,一起剝皮案震驚了整個濱河市徐钠,隨后出現(xiàn)的幾起案子堂飞,更是在濱河造成了極大的恐慌悔叽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件周蹭,死亡現(xiàn)場離奇詭異趋艘,居然都是意外死亡,警方通過查閱死者的電腦和手機谷醉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門致稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冈闭,“玉大人俱尼,你說我怎么就攤上這事∥埽” “怎么了遇八?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耍休。 經(jīng)常有香客問我刃永,道長,這世上最難降的妖魔是什么羊精? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任斯够,我火速辦了婚禮,結(jié)果婚禮上喧锦,老公的妹妹穿的比我還像新娘读规。我一直安慰自己,他們只是感情好燃少,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布束亏。 她就那樣靜靜地躺著,像睡著了一般阵具。 火紅的嫁衣襯著肌膚如雪碍遍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天阳液,我揣著相機與錄音怕敬,去河邊找鬼。 笑死帘皿,一個胖子當著我的面吹牛东跪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼越庇,長吁一口氣:“原來是場噩夢啊……” “哼罩锐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卤唉,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涩惑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桑驱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竭恬,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年熬的,在試婚紗的時候發(fā)現(xiàn)自己被綠了痊硕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡押框,死狀恐怖岔绸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橡伞,我是刑警寧澤盒揉,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站兑徘,受9級特大地震影響刚盈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挂脑,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一藕漱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崭闲,春花似錦肋联、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薄翅,卻和暖如春沙兰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翘魄。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工鼎天, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暑竟。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓斋射,卻偏偏與公主長得像育勺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罗岖,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 一涧至、流的概念和作用。 流是一種有順序的桑包,有起點和終點的字節(jié)集合南蓬,是對數(shù)據(jù)傳輸?shù)目偝苫虺橄蟆<磾?shù)據(jù)在兩設備之間的傳輸...
    布魯斯不吐絲閱讀 10,045評論 2 95
  • IO簡單概述 IO解決問題 : 解決設備與設備之間的數(shù)據(jù)傳輸問題(硬盤 -> 內(nèi)存 內(nèi)存 -> 硬盤) 讀和寫文...
    奮斗的老王閱讀 3,440評論 0 53
  • 在經(jīng)過一次沒有準備的面試后哑了,發(fā)現(xiàn)自己雖然寫了兩年的android代碼赘方,基礎(chǔ)知識卻忘的差不多了。這是程序員的大忌弱左,沒...
    猿來如癡閱讀 2,843評論 3 10
  • 最好的時候莫過于窄陡, 我要上公交車, 你騎著自行車給我送來了充電器拆火。 最好的關(guān)心莫過于跳夭, 在我難過流淚的時候, 你在...
    葉抽抽閱讀 229評論 9 6
  • 七絕·題丹山春韻圖(中華新韻) ——溪竹青巖入鏡湖雄峙天榜掌,景非千里不得緣优妙。坐...
    溪竹青閱讀 774評論 8 6