(八)“標(biāo)準(zhǔn)”的輸入流與輸出流


1犯眠、基本介紹

IO流基礎(chǔ)中的第2部分悦析,有關(guān)設(shè)備 的內(nèi)容中提到了鍵盤(pán)(標(biāo)準(zhǔn)輸入)开财、控制臺(tái)(標(biāo)準(zhǔn)輸出),下面就詳細(xì)的介紹一下什么是標(biāo)準(zhǔn)的輸入與輸出:

標(biāo)準(zhǔn)的輸入流與輸出流都屬于System類的靜態(tài)成員惹悄。
其中in代表的是已經(jīng)創(chuàng)建好的可以直接從鍵盤(pán)讀取的InputStream類型的流對(duì)象淹辞;

public static final InputStream in

out代表的是已經(jīng)創(chuàng)建好的可以直接寫(xiě)入數(shù)據(jù)到控制臺(tái)的PrintStream類型的流對(duì)象;

public static final PrintStream out

對(duì)于簡(jiǎn)單獨(dú)立的 Java 應(yīng)用程序俘侠,編寫(xiě)一行輸出數(shù)據(jù)的典型方式是:

System.out.println(data)

2象缀、使用標(biāo)準(zhǔn)的輸入流

import java.io.IOException;
import java.io.InputStream;

public class Test1 {
public static void main(String[] args) throws IOException {
        Demo1();
}

        public static void Demo1() throws IOException{
        //使用標(biāo)準(zhǔn)輸入流,即從鍵盤(pán)直接輸入
        InputStream is = System.in;
        /*
         * in是System類的一個(gè)靜態(tài)成員
         * 因此可以通過(guò)類名直接訪問(wèn)爷速,即System.in
         * in又是InputStream對(duì)象的引用
         * 因此創(chuàng)建InputStream對(duì)象is指向in
         */             
        int num = is.read();//每次讀取單個(gè)字符央星,返回字節(jié)
        //read()方法被稱為阻塞式方法,只要沒(méi)有輸入惫东,就會(huì)一直等待
        System.out.println((char)num);      
        }
}

3莉给、使用標(biāo)準(zhǔn)的輸入流實(shí)現(xiàn)簡(jiǎn)單功能

import java.io.IOException;
import java.io.InputStream;

public class Test2 {
public static void main(String[] args) throws IOException {
        Demo2();
}

    public static void Demo2() throws IOException{
        /*
         * 實(shí)現(xiàn)如下功能:
         * 循環(huán)讀取鍵盤(pán)輸入的數(shù)據(jù)
         * 滿一行之后輸出大寫(xiě)字符
         * 不滿一行進(jìn)行存儲(chǔ)
         */ 
    InputStream in = System.in;
    int num;
    //從鍵盤(pán)輸入的都是字符,因此使用StringBuilder處理進(jìn)行存儲(chǔ)
    StringBuilder sb = new StringBuilder();
    while(true){
        num = in.read();
        if(num=='\r'){//windows下?lián)Q行符為"\r\n"兩個(gè)字符
            continue;//如果是'\r'就繼續(xù)   
        }else if(num=='\n'){//如果是'\n'則表示已滿一行
        if("over".equals(sb.toString())){
            break;//如果輸入"over"結(jié)束循環(huán)
        }
    System.out.println(sb.toString().toUpperCase());//獲得輸入的字符串并調(diào)用轉(zhuǎn)大寫(xiě)方法
    //在下次輸出前清除StringBuilder中存儲(chǔ)的字符串
    sb.delete(0, sb.length());//刪除從下標(biāo)0開(kāi)始到字符串全長(zhǎng)也就是末尾的字符
        }else{
            sb.append((char)num);//不滿一行就存儲(chǔ)數(shù)據(jù)
        }
    }
}
}

4廉沮、優(yōu)化上述功能

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class Test3 {
public static void main(String[] args) throws IOException {
        Demo3();
    }

    public static void Demo3() throws IOException{
    //使用ReadLine優(yōu)化Demo2()
        /*
         * 轉(zhuǎn)換流:
         * 可以把字節(jié)輸入流轉(zhuǎn)換成字符輸入流的類:InputStreamReader
         * 可以把字節(jié)輸出流轉(zhuǎn)換成字符輸出流的類:OutputStreamWriter
         */
    //定義標(biāo)準(zhǔn)的字節(jié)輸入流
    InputStream in = System.in;
    //把字節(jié)輸入流轉(zhuǎn)換成字符輸入流
    InputStreamReader isr = new InputStreamReader(in);
    //為了提高效率颓遏,使用BufferedReader
    BufferedReader br = new BufferedReader(isr);

    //定義標(biāo)準(zhǔn)的字符輸出流
    PrintStream out = System.out;
    //把字節(jié)輸出流轉(zhuǎn)換成字符輸出流
    OutputStreamWriter osw = new OutputStreamWriter(out);
    //為了提高效率,使用BufferedWriter
    BufferedWriter bw = new BufferedWriter(osw);
            
    String line = null;
    //每次從鍵盤(pán)讀取一行
    while((line=br.readLine())!=null){
    if("over".equals(line)){//如果輸入"over"結(jié)束循環(huán)
            break;
    }
    //使用字符流輸出
    bw.write(line.toUpperCase());
    bw.newLine();
    bw.flush();
    }
    br.close();
    bw.close();
    }   
}


5滞时、進(jìn)一步精簡(jiǎn)上述代碼

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test4{
public static void main(String[] args) throws IOException {
        Demo4();
    }

    public static void Demo4() throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));                   
    String line = null;
    while((line=br.readLine())!=null){
        if("over".equals(line)){
            break;
        }
    //直接使用標(biāo)準(zhǔn)字節(jié)流輸出
    System.out.println(line.toUpperCase());
        /*
         * 與in類似叁幢,out也是定義在System類中的靜態(tài)成員,所屬類型為printStream
         * out就是字節(jié)輸出流對(duì)象坪稽,對(duì)象可調(diào)用println方法曼玩,即out.println
         * 對(duì)比可見(jiàn)直節(jié)使用字節(jié)輸出流僅需要一行代碼
         * 同時(shí)也不再需要定義更多的變量
         * 因此在平時(shí)使用時(shí)常用字節(jié)流輸出
         */
        }
    br.close();
    }   
}


6、優(yōu)化標(biāo)準(zhǔn)的輸入與輸出

之前標(biāo)準(zhǔn)的輸入流與輸出流是指從鍵盤(pán)直接讀取并且寫(xiě)入到控制臺(tái)窒百,如下:

源(從哪讀):鍵盤(pán)
目的(往哪寫(xiě)):控制臺(tái)

現(xiàn)在要實(shí)現(xiàn)從鍵盤(pán)讀取黍判,直接寫(xiě)入到文件中,如下:

源(從哪讀):鍵盤(pán)
目的(往哪寫(xiě)):文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class Test5 {
public static void main(String[] args) throws IOException {
        Demo5();
    }

    public static void Demo5() throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\Demo5.txt"));
    String line = null;
    while((line=br.readLine())!=null){
        if("over".equals(line)){
            break;
        }
        bw.write(line.toUpperCase());
        bw.newLine();
        bw.flush();
    }
    br.close();
    bw.close();
    }
}

接著要實(shí)現(xiàn)從文件讀取篙梢,寫(xiě)入到控制臺(tái)顷帖,如下:

源(從哪讀):文件
目的(往哪寫(xiě)):控制臺(tái)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Test6 {
public static void main(String[] args) throws IOException {
        Demo6();
    }

    public static void Demo6() throws IOException{
    BufferedReader br = new BufferedReader(new FileReader("F:\\Demo5.txt"));
    String line = null;
    while((line=br.readLine())!=null){
        if("over".equals(line)){
            break;
        }
        System.out.println(line.toUpperCase());
    }
    br.close();
    }
}

7、改變標(biāo)準(zhǔn)的輸入與輸出

改變標(biāo)準(zhǔn)的輸入:System.setIn();
改變標(biāo)準(zhǔn)的輸出:System.setOut();

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class Test7 {
public static void main(String[] args) throws IOException {
        Demo7();
    }

    public static void Demo7() throws IOException{
    System.setIn(new FileInputStream("F:\\Demo5.txt"));//改變標(biāo)準(zhǔn)的輸入
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.setOut(new PrintStream("F:\\Demo5_copy.txt"));//改變標(biāo)準(zhǔn)的輸出
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String line = null;
    while((line=br.readLine())!=null){
        if("over".equals(line)){
            break;
        }
        bw.write(line.toUpperCase());
        bw.newLine();
        bw.flush();
    }
    br.close();
    bw.close();
    }
}

版權(quán)聲明:歡迎轉(zhuǎn)載渤滞,歡迎擴(kuò)散贬墩,但轉(zhuǎn)載時(shí)請(qǐng)標(biāo)明作者以及原文出處,謝謝合作蔼水!             ↓↓↓
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末震糖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趴腋,更是在濱河造成了極大的恐慌吊说,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件优炬,死亡現(xiàn)場(chǎng)離奇詭異颁井,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蠢护,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)雅宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人葵硕,你說(shuō)我怎么就攤上這事眉抬」嵯牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蜀变,是天一觀的道長(zhǎng)悄谐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)库北,這世上最難降的妖魔是什么爬舰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮寒瓦,結(jié)果婚禮上情屹,老公的妹妹穿的比我還像新娘。我一直安慰自己杂腰,他們只是感情好垃你,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著颈墅,像睡著了一般蜡镶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恤筛,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天官还,我揣著相機(jī)與錄音,去河邊找鬼毒坛。 笑死望伦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煎殷。 我是一名探鬼主播屯伞,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豪直!你這毒婦竟也來(lái)了劣摇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弓乙,失蹤者是張志新(化名)和其女友劉穎末融,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體暇韧,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勾习,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懈玻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巧婶。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艺栈,到底是詐尸還是另有隱情英岭,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布眼滤,位于F島的核電站巴席,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诅需。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一荧库、第九天 我趴在偏房一處隱蔽的房頂上張望堰塌。 院中可真熱鬧,春花似錦分衫、人聲如沸场刑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牵现。三九已至,卻和暖如春邀桑,著一層夾襖步出監(jiān)牢的瞬間瞎疼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工壁畸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贼急,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓捏萍,卻偏偏與公主長(zhǎng)得像太抓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子令杈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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