<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    File & String 輸入輸出

    Posted on 2009-07-23 16:06 Gavin.lee 閱讀(1630) 評論(0)  編輯  收藏 所屬分類: Log && File Operate


    多靈活多變的功能是由它們的子類來擴充完成的。知道了Java輸入輸出的基本層次結構以后,本文在這里想給大家一些以后可以反復應用例子,對于所有子類的細節及其功能并不詳細討論。

    import java.io.*;

    public class IOStreamDemo {

          public void samples() throws IOException {

               //1. 這是從鍵盤讀入一行數據,返回的是一個字符串
               BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));
               System.out.print("Enter a line:");
               System.out.println(stdin.readLine());

               //2. 這是從文件中逐行讀入數據

               BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"));
               String s, s2 = new String();
               while((s = in.readLine())!= null)
                          s2 += s + "\n";
               in.close();


               //3. 這是從一個字符串中逐個讀入字節
               StringReader in1 = new StringReader(s2);
               int c;
               while((c = in1.read()) != -1)
                          System.out.print((char)c);


               //4. 這是將一個字符串寫入文件
               try {
                          BufferedReader in2 = new BufferedReader(new StringReader(s2));
                          PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));
                          int lineCount = 1;
                          while((s = in2.readLine()) != null )
                                     out1.println(lineCount++ + ": " + s);
                          out1.close();
               } catch(EOFException e) {
                          System.err.println("End of stream");
               }
          }

    對于上面的例子,需要說明的有以下幾點:

      1. BufferedReader是Reader的一個子類,它具有緩沖的作用,避免了頻繁的從物理設備中讀取信息。它有以下兩個構造函數:

            BufferedReader(Reader in) 
            BufferedReader(Reader in, int sz) 

      這里的sz是指定緩沖區的大小。

      它的基本方法:

                 void close() //關閉流

                 void mark(int readAheadLimit) //標記當前位置

                 boolean markSupported() //是否支持標記

                 int read() //繼承自Reader的基本方法

                 int read(char[] cbuf, int off, int len) //繼承自Reader的基本方法

                 String readLine() //讀取一行內容并以字符串形式返回
     
                 boolean ready() //判斷流是否已經做好讀入的準備

                 void reset() //重設到最近的一個標記

                 long skip(long n) //跳過指定個數的字符讀取

            2. InputStreamReader是InputStream和Reader之間的橋梁,由于System.in是字節流,需要用它來包裝之后變為字符流供給BufferedReader使用。


      3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));

      這句話體現了Java輸入輸出系統的一個特點,為了達到某個目的,需要包裝好幾層。首先,輸出目的地是文件IODemo.out,所以最內層包裝的是 FileWriter,建立一個輸出文

    件流,接下來,我們希望這個流是緩沖的,所以用BufferedWriter來包裝它以達到目的,最后,我們需要格式化輸出結果,于是將PrintWriter包在最外層。


    Java提供了這樣一個功能,將標準的輸入輸出流轉向,也就是說,我們可以將某個其他的流設為標準輸入或輸出流,看下面這個例子:

    import java.io.*;

    public class Redirecting {

           public static void main(String[] args) throws IOException {
                  PrintStream console = System.out;
                  BufferedInputStream in = new BufferedInputStream( new FileInputStream( "Redirecting.java"));
                  PrintStream out = new PrintStream( new BufferedOutputStream( new FileOutputStream("test.out")));
                  System.setIn(in);
                  System.setOut(out);

                  BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
                  String s;
                  while((s = br.readLine()) != null)
                         System.out.println(s);
                  out.close();
                  System.setOut(console);
          }
    }
     

      在這里java.lang.System的靜態方法

                static void setIn(InputStream in) 
                static void setOut(PrintStream out) 

      提供了重新定義標準輸入輸出流的方法,這樣做是很方便的,比如一個程序的結果有很多,有時候甚至要翻頁顯示,這樣不便于觀看結果,這是你就可以將標準輸出流定義為

    一個文件流,程序運行完之后打開相應的文件觀看結果,就直觀了許多。

    主站蜘蛛池模板: 亚洲国产精品综合久久久| 久久久综合亚洲色一区二区三区 | 国产中文在线亚洲精品官网| 亚洲伊人久久大香线蕉AV| 50岁老女人的毛片免费观看| 亚洲精品国产情侣av在线| 99精品视频在线视频免费观看| 亚洲国产成人久久综合碰碰动漫3d| 久久久精品免费国产四虎| 久久久久亚洲av无码专区蜜芽| 国产免费一区二区三区在线观看| 亚洲线精品一区二区三区影音先锋 | 免费无码看av的网站| 亚洲精品美女久久7777777| 日韩一区二区免费视频| 羞羞视频免费观看| 亚洲中文字幕无码一区| 美女内射无套日韩免费播放| 亚洲国产情侣一区二区三区| 在线成人a毛片免费播放| 免费无码专区毛片高潮喷水| 国产成人精品久久亚洲高清不卡 | 精品国产免费一区二区三区| 亚洲AV日韩AV永久无码免下载| 91成人免费在线视频| 亚洲av日韩精品久久久久久a| 亚洲国产综合人成综合网站| 一级毛片免费观看| 亚洲色偷偷色噜噜狠狠99| 亚洲综合色在线观看亚洲| 老汉精品免费AV在线播放| 亚洲熟妇无码一区二区三区| 亚洲人成色7777在线观看不卡| 免费在线看黄的网站| jiz zz在亚洲| 国产美女亚洲精品久久久综合| 亚洲香蕉免费有线视频| 猫咪免费观看人成网站在线| 久久精品国产亚洲AV电影| 亚洲国产综合久久天堂| 香蕉97超级碰碰碰免费公|