雜流

標準的輸入輸出流:

輸入流:把鍵盤錄入的數(shù)據(jù)寫入文件中;字節(jié)流

public static final InputStream in;

//根據(jù)鍵盤錄入的內(nèi)容復制到文本文件中;

//創(chuàng)建一個鍵盤錄入的流 字節(jié)流

InputStream is = System.in;

//輸出流 字符輸出流 -->高效的字符輸出流

BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

//寫數(shù)據(jù)

byte[] bys = new byte[1024];

int len;//每次讀取了多少

//循環(huán)讀寫

while((len = is.read(bys))!= -1){

bw.write(new String(bys,0,len));

//刷新方法一定要寫

bw.flush();

}

//關(guān)閉流

is.close();

bw.close();

輸出流:把文件中的數(shù)據(jù)打印到控制臺上;字節(jié)流

public static final PrintStream out;

把目標文件的內(nèi)容打印到控制臺上

//把目標文件內(nèi)容輸出到命令行

//創(chuàng)建了一個高效的字符輸入流

BufferedReader br = new BufferedReader(new FileReader("文件路徑"));

//創(chuàng)建一個標準的輸出流

OutputStream os = System.out;

//讀取數(shù)據(jù)

String line;

//循環(huán)遍歷

while((line = br.readLine()) != null){

//寫數(shù)據(jù)

os.write(line.getBytes());

//換行

os.write("\r\n".getBytes());

}

//關(guān)閉流

br.close();

os.close();

轉(zhuǎn)換流:當你需要把字節(jié)流封裝成為字符流的時候可以使用轉(zhuǎn)換流進行操作;

OutputStreamWriter:把字節(jié)輸出流轉(zhuǎn)換成為字符輸出流,寫數(shù)據(jù)的時候是可以設置數(shù)據(jù)的編碼格式;

復制文本內(nèi)容到控制臺

//把目標文件內(nèi)容輸出到命令行

//創(chuàng)建輸出輸入流

BufferedReader br = new BufferedReader(new FileReader("文件的路徑"));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

//讀寫數(shù)據(jù)

String line;

//循環(huán)讀寫

while((line = br.readLine()) != null){

bw.write(line);

bw.newLine();

}

//關(guān)閉流

br.close();

bw.close();

InputStreamReader:把字節(jié)輸入流轉(zhuǎn)換成為字符輸入流,讀數(shù)據(jù)的時候可以設置數(shù)據(jù)的編碼格式;

用高效流完成鍵盤錄入寫入到txt文件中:

//創(chuàng)建一個鍵盤錄入的流 字節(jié)流==>轉(zhuǎn)換流包裝一下 InputStreamReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//輸出流 字符輸出流 -->高效的字符輸出流

BufferedWriter bw = new BufferedWriter(new FileWriter("文件路徑"));

//寫數(shù)據(jù)

String line;

//循環(huán)寫入

while((line = br.readLine()) != null){

bw.write(line);

bw.newLine();

bw.flush();

}

//關(guān)閉流

br.close();

bw.close();

打印流:PrintWriter---->打印字符輸出流

特點:

1.自動換行: 使用打印流中的println;

2.自動刷新: 創(chuàng)建打印流對象的時候使用啟用自動刷新開關(guān)的構(gòu)造方法,

并使用println,printf,format方法寫數(shù)據(jù);

PrintWriter:本身是沒有寫的功能,他是一個包裝流

PrintWriter(File file) ://傳file類型的對象

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))):

//創(chuàng)建了一個高效的字符輸出流(創(chuàng)建了轉(zhuǎn)換流把字節(jié)輸出流轉(zhuǎn)換成為字符流(創(chuàng)建了字節(jié)流傳入了一個file對象))

PrintWriter(String fileName) ://傳String類型的文件名

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))):

//創(chuàng)建了一個高效的字符輸出流(創(chuàng)建了轉(zhuǎn)換流把字節(jié)輸出流轉(zhuǎn)換成為字符流(創(chuàng)建了字節(jié)流傳入了一個String對象))

PrintWriter(OutputStream out) ://傳入字節(jié)流

new BufferedWriter(new OutputStreamWriter(out)):

//創(chuàng)建了一個高效的字符輸出流(創(chuàng)建了一個轉(zhuǎn)換流把字節(jié)輸出流轉(zhuǎn)換成為字符輸出流)

PrintWriter(Writer out) ://傳入字符輸出流? (多態(tài)) 可以傳入字符流所有的子類;

BufferedWriter br = new BufferedWriter(new FileWriter(file));

打印流的特有功能:

1.自動刷新:要啟動自動刷新的開關(guān),在創(chuàng)建打印流對象的時候在目標路徑的后傳入true;

2.自動換行:必須要使用println,printf,format這三個方法實現(xiàn),并且要同時打開我們的autoFlush開關(guān)

打印流復制文本文件:

BufferedReader br = new BufferedReader(new FileReader("文件路徑"));

PrintWriter pw = new PrintWriter(new FileWriter("目標路徑"),是否開啟刷新);

String line;

while ((line = br.readLine())!= null) {

pw.println(line);//直接使用println()

}

br.close();

pw.close();

對象操作流:

ObjectOutputStream:對象輸出流

ObjectInputStream:對象輸入流

注意:

1.使用對象操作流的對象必須實現(xiàn)Serializable接口

2.使用對象輸出流寫出數(shù)據(jù)必須也要使用對象輸入流讀取數(shù)據(jù);

NotSerializableException:

產(chǎn)生原因:使用對象操作流的對象沒有實現(xiàn)Serializable接口生成一個UID;

解決辦法:實現(xiàn)Serializable接口并生成一個UID(辨識碼)

EOFException:

產(chǎn)生原因:讀到了文件的末尾;

解決辦法:

利用try..catch把異常捕獲并提示;

另一種解決EOFException的方法:

1.創(chuàng)建一個集合對象,把我們要操作的對象存入到集合中去;

2.然后利用對象輸出流(ObjectOutputStream) 把集合對象寫到文本中去;

3.當我們讀取這個裝有對象信息的文件時,我們可以只用讀取一次數(shù)據(jù),把集合對象給獲取出來

4.遍歷集合對象,獲取集合對象中存儲的其他對象元素;

Properties://持久的屬性集 以后更多的使用是作為配置文件

特點:

1.它的鍵和值都是String類型的;

2.Properties是沒有泛型的;

//添加功能

put方法(和Map集合很相似)

setProperties(String key,String value):

Properties的遍歷方式:

1.獲取所有的鍵,根據(jù)鍵找值;

2.獲取所有的鍵值對對象,根據(jù)鍵值對對象的集合,獲取相應的鍵和值;

Properties和IO一起使用的方法:

void list(PrintWriter out)? :根據(jù)傳入的輸出流,把properties里面的數(shù)據(jù)寫入到指定文件中;

void store(Writer writer, String comments)

:根據(jù)傳入的字符輸出流,把properties里面的數(shù)據(jù)寫入到指定文件中,并可以加上說明;

若不想寫說明,直接在第二個參數(shù)傳null;

//步驟:

1.創(chuàng)建propreties的對象

Properties prop = new Properties();

2.添加元素;

prop.put(String,String);

3.創(chuàng)建輸出流對象;

FileWriter fw = new FileWriter("文件路徑");

4.調(diào)用list或者store方法;

prop.list(fw);

5.關(guān)閉流;

fw.close();

void load(InputStream inStream)? :根據(jù)傳入的字節(jié)輸入流,把文件中的數(shù)據(jù)存儲到propreties的屬性集中;

//步驟:

1.創(chuàng)建propreties的對象;

Properties prop = new Properties();

2.創(chuàng)建輸入流對象;

FileInputStream fis = new FileInputStream("文件路徑");

3.調(diào)用load方法,把文件中的屬性添加到集合中去

prop.load(fis);//加載

4.關(guān)閉流;

fis.close();

常用流:

字節(jié)流:

FileInputStream; -->InputStream

FileOutputStream;-->OutputStream

字符流:

BufferedWriter;-->Writer

BufferedReader;-->Reader

編碼://我們用代碼的形式規(guī)定編碼格式的時候很少;一般通過修改文件的屬性去完成整理亂碼的功能

普通方式修改編碼:

直接修改文件的編碼格式就可以了

用代碼的方式修改編碼格式

對已有的數(shù)據(jù)進行字符編碼格式的操作

String的構(gòu)造方法:

String(byte[] bytes, int offset, int length, String charsetName) :

//根據(jù)傳入的字節(jié)數(shù)組長度,把這個字節(jié)數(shù)組轉(zhuǎn)換成為字符串數(shù)據(jù)并限定編碼格式

String(byte[] bytes, String charsetName) :

//根據(jù)傳入的字節(jié)數(shù)組,把這個字節(jié)數(shù)組轉(zhuǎn)換成為字符串數(shù)據(jù)并限定編碼格式;

String的成員方法:

byte[] getBytes(String charsetName) :返回一個字節(jié)數(shù)組并對字節(jié)數(shù)組的編碼格式進行限定;

若以后想對讀寫的數(shù)據(jù)限定編碼格式,歡迎使用轉(zhuǎn)換流;

在讀寫數(shù)據(jù)的時候,就規(guī)定編碼格式,我們使用轉(zhuǎn)換流來完成讀寫功能;

種類:

ASCII-->GB2312-->GBK --->Unicode-->UTF-8(長度可變)


對于這章的知識董栽,我只是習慣用高效的輸入和輸出流埃元,而對于數(shù)據(jù)操作我喜歡一次讀取一行數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛆橡,一起剝皮案震驚了整個濱河市艾蓝,隨后出現(xiàn)的幾起案子骨望,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滞伟,死亡現(xiàn)場離奇詭異揭鳞,居然都是意外死亡,警方通過查閱死者的電腦和手機梆奈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門野崇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亩钟,你說我怎么就攤上這事乓梨。” “怎么了清酥?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵扶镀,是天一觀的道長。 經(jīng)常有香客問我焰轻,道長臭觉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任辱志,我火速辦了婚禮蝠筑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揩懒。我一直安慰自己什乙,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布已球。 她就那樣靜靜地躺著臣镣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪和悦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天渠缕,我揣著相機與錄音鸽素,去河邊找鬼。 笑死亦鳞,一個胖子當著我的面吹牛馍忽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燕差,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼遭笋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了徒探?” 一聲冷哼從身側(cè)響起瓦呼,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎测暗,沒想到半個月后央串,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磨澡,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年质和,在試婚紗的時候發(fā)現(xiàn)自己被綠了稳摄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡饲宿,死狀恐怖厦酬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘫想,我是刑警寧澤仗阅,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站殿托,受9級特大地震影響霹菊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜支竹,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一旋廷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧礼搁,春花似錦饶碘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饮戳,卻和暖如春豪治,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扯罐。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工负拟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歹河。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓掩浙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秸歧。 傳聞我的和親對象是個殘疾皇子厨姚,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 1 IO(二)No19 【 緩沖流:內(nèi)置了緩沖區(qū),對現(xiàn)有的流對象進行了封裝键菱,實現(xiàn)了高效的讀寫操作并增強了功能 ...
    征程_Journey閱讀 707評論 0 1
  • ①IO流(字符流FileReader) 1.字符流是什么字符流是可以直接讀寫字符的IO流字符流讀取字符, 就要先讀...
    Y小圓臉閱讀 511評論 0 2
  • 1. Java基礎部分 基礎部分的順序:基本語法谬墙,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法芭梯,異常的語法险耀,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 概述 計算機并不區(qū)分二進制文件與文本文件。所有的文件都是以二進制形式來存儲的玖喘,因此甩牺,從本質(zhì)上說,所有的文件都是二進...
    奮斗的老王閱讀 1,328評論 0 51
  • 170806【讀書 day147】《我決定活得有趣》蔡瀾 25m “平穩(wěn)的人生累奈, 一定很悶贬派。 我受不了悶, 我決定...
    水若_小水囈夢閱讀 139評論 0 0