IO流1

IO流一

image

字節(jié)流

FileInputStream

FileInputStream(File file) 
      通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream,該文件通過文件系統(tǒng)中的 File 對象 file 指定玩郊。 
FileInputStream(String name) 
      通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream肢执,該文件通過文件系統(tǒng)中的路徑名 name 指定。 

int read() 
      從此輸入流中讀取一個數(shù)據字節(jié)译红。 
int read(byte[] b) 
      從此輸入流中將最多 b.length 個字節(jié)的數(shù)據讀入一個 byte 數(shù)組中预茄。
int read(byte[] b, int off, int len) 
      從此輸入流中將最多 len 個字節(jié)的數(shù)據讀入一個 byte 數(shù)組中。
        off - 目標數(shù)組 b 中的起始偏移量。
        len - 讀取的最大字節(jié)數(shù)耻陕。 

//逐個字節(jié)讀入
public static void main(String[] args) throws IOException {
    
    InputStream in = new FileInputStream("a.txt");
    int i = 0;
    while((i = in.read()) != -1) {
        System.out.println((char)i);
    }
    in.close();
}
//帶有字節(jié)緩沖流的輸入流
public static void main(String[] args) throws IOException {
    
    InputStream in = new FileInputStream("a.txt");
    byte[] b = new byte[1024 * 8];
    int len = 0;
    while((len = in.read(b)) != -1) {
        System.out.println(new String(b,0,len));
    }
    in.close();
    
}

FileOutputStream

當指向的文件不遜在世拙徽,會自動創(chuàng)建一個,但是創(chuàng)建不了多級目錄诗宣。

FileOutputStream(File file) 
      創(chuàng)建一個向指定 File 對象表示的文件中寫入數(shù)據的文件輸出流膘怕。 
FileOutputStream(File file, boolean append) 
      創(chuàng)建一個向指定 File 對象表示的文件中寫入數(shù)據的文件輸出流。boolean表示是否追加 
FileOutputStream(String name) 
      創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據的輸出文件流召庞。 
FileOutputStream(String name, boolean append) 
      創(chuàng)建一個向具有指定 name 的文件中寫入數(shù)據的輸出文件流岛心。boolean表示是否追加  

void write(byte[] b) 
      將 b.length 個字節(jié)從指定 byte 數(shù)組寫入此文件輸出流中。 
void write(byte[] b, int off, int len) 
      將指定 byte 數(shù)組中從偏移量 off 開始的 len 個字節(jié)寫入此文件輸出流篮灼。 
void write(int b) 
      將指定字節(jié)寫入此文件輸出流忘古。 

private static void writeTxtFile(String path) throws IOException {
    // 1:打開文件輸出流,流的目的地是指定的文件
    FileOutputStream fos = new FileOutputStream(path);
    // 2:通過流向文件寫數(shù)據
    fos.write('j');
    fos.write('a');
    fos.write('v');
    fos.write('a');
    // 3:用完流后關閉流
    fos.close();
}

注意:使用write(int b)方法诅诱,雖然接收的是int類型參數(shù)髓堪,但是write 的常規(guī)協(xié)定是:向輸出流寫入一個字節(jié)。要寫入的字節(jié)是參數(shù) b 的八個低位娘荡。b 的 24 個高位將被忽略旦袋。

private static void writeTxtFile(String path) throws IOException {
    // 1:打開文件輸出流,流的目的地是指定的文件
    FileOutputStream fos = new FileOutputStream(path);
    // 2:通過流向文件寫數(shù)據
    byte[] byt = "java".getBytes();
    fos.write(byt);
    // 3:用完流后關閉流
    fos.close();
}

仔細查看a.txt文本文件發(fā)現(xiàn)上述程序每運行一次它改,老的內容就會被覆蓋掉。
那么如何不覆蓋已有信息商乎,能夠往a.txt里追加信息呢央拖。
查看API文檔,發(fā)現(xiàn)FileOutputStream類中的構造方法中有一個構造可以實現(xiàn)追加的功能FileOutputStream(File file, boolean append) 
第二個參數(shù)鹉戚,append - 如果為 true鲜戒,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處

private static void writeTxtFile(String path) throws IOException {
    // 1:打開文件輸出流抹凳,流的目的地是指定的文件
    FileOutputStream fos = new FileOutputStream(path,true);

    // 2:通過流向文件寫數(shù)據
    byte[] byt = "java".getBytes();
    fos.write(byt);
    // 3:用完流后關閉流
    fos.close();
}

文件拷貝

public static void copyFile2(String srcPath, String destPath)
        throws IOException {
    // 打開輸入流遏餐,輸出流
    FileInputStream fis = new FileInputStream(srcPath);
    FileOutputStream fos = new FileOutputStream(destPath,true);

    // 讀取和寫入信息
    int len = 0;

    // 使用字節(jié)數(shù)組,當做緩沖區(qū)
    byte[] byt = new byte[1024];
    while ((len = fis.read(byt)) != -1) {
        fos.write(byt);
    }

    // 關閉流
    fis.close();
    fos.close();
}

字節(jié)流的異常處理

public static void copyFile(String srcPath, String destPath) {

    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream(srcPath);
        fos = new FileOutputStream(destPath);

        byte[] byt = new byte[1024 * 1024];
        int len = 0;
        while ((len = fis.read(byt)) != -1) {

            fos.write(byt, 0, len);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);//拋出 catch后的代碼不會執(zhí)行
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }

}

在最后的close代碼中可能會有問題赢底,兩個close失都,如果第一個close方法出現(xiàn)了異常,并拋出了運行時異常幸冻,那么程序還是停止了粹庞。下面的close方法就沒有執(zhí)行到。
那么為了保證close的執(zhí)行洽损,將第二個放到fianlly中即可庞溜。

public static void copyFile(String srcPath, String destPath) {

    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream(srcPath);
        fos = new FileOutputStream(destPath);

        byte[] byt = new byte[1024 * 1024];
        int len = 0;
        while ((len = fis.read(byt)) != -1) {

            fos.write(byt, 0, len);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {

        try {
            if (fis != null) {
                fis.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碑定,隨后出現(xiàn)的幾起案子流码,更是在濱河造成了極大的恐慌又官,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漫试,死亡現(xiàn)場離奇詭異六敬,居然都是意外死亡,警方通過查閱死者的電腦和手機商虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門觉阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秘车,你說我怎么就攤上這事典勇。” “怎么了叮趴?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵割笙,是天一觀的道長。 經常有香客問我眯亦,道長伤溉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任妻率,我火速辦了婚禮乱顾,結果婚禮上,老公的妹妹穿的比我還像新娘宫静。我一直安慰自己走净,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布孤里。 她就那樣靜靜地躺著伏伯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捌袜。 梳的紋絲不亂的頭發(fā)上说搅,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音虏等,去河邊找鬼弄唧。 笑死,一個胖子當著我的面吹牛霍衫,可吹牛的內容都是我干的套才。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慕淡,長吁一口氣:“原來是場噩夢啊……” “哼背伴!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤傻寂,失蹤者是張志新(化名)和其女友劉穎息尺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疾掰,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡搂誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了静檬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炭懊。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拂檩,靈堂內的尸體忽然破棺而出侮腹,到底是詐尸還是另有隱情,我是刑警寧澤稻励,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布父阻,位于F島的核電站,受9級特大地震影響望抽,放射性物質發(fā)生泄漏加矛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一煤篙、第九天 我趴在偏房一處隱蔽的房頂上張望斟览。 院中可真熱鬧,春花似錦辑奈、人聲如沸趣惠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至草戈,卻和暖如春塌鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唐片。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工丙猬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人费韭。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓茧球,卻偏偏與公主長得像,于是被迫代替她去往敵國和親星持。 傳聞我的和親對象是個殘疾皇子抢埋,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354