從標準輸入流中讀取資料

不設限發表於2011-12-07
 

package chapter10.branch01;

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestStandarInput {
 public static void main(String[] args) throws Exception {
  new TestStandarInput().input2();
 }
 
 /**
  *
  * <b>方法名:</b>
  *     <p>input1<p>
  * <b>功能描述:</b>
  *     <p>
  *     以行的方式進行讀取的,BufferedReader對字元進
  *     行了包裝, 所以列印出來的跟輸入進去的是一樣的
  *     因為位元組跟字元的轉換,它的內部已經整理好了
  *     <p>
  * @throws Exception
  */
 public void input1() throws Exception {
  String s=null;
  InputStreamReader isr=new InputStreamReader(System.in);
  BufferedReader br=new BufferedReader(isr);
  s=br.readLine();
  while(s!="") {
   System.out.println("你輸入的內容是:"+s);
   s=br.readLine();
  }
  //使用完了一定要關閉它否則就會浪費資源
  br.close();
 }
 
 /**
  *
  * <b>方法名:</b>
  *     <p>input2<p>
  * <b>功能描述:</b>
  *     <p>
  *     以位元組的方式去讀取內容,列印出來的時候依然是
  *     按照位元組的方式列印出來
  *     <p>
  * @throws Exception
  */
 public void input2() throws Exception {
  /**
   * 這個地方也完全可以定義為int型別,因為char型別
   * 到int型別之間的轉換是隱式的轉換,不過問題在於
   * 如果寫成了int那麼列印出來的肯定就只是數字了
   */
  char s;
  InputStreamReader isr=new InputStreamReader(System.in);
  s=(char) isr.read();
  while(s!=0) {
   System.out.println("你輸入的內容是:"+s);
   s=(char) isr.read();
  }
  //使用完了一定要關閉它否則就會浪費資源
  isr.close();
 }
}

 

從控制檯獲取輸入資料寫入本地檔案

 

File f=new File("E:\\testio\\dada.txt");
  f.createNewFile();
  InputStreamReader isr=new InputStreamReader(System.in);
  BufferedReader in=new BufferedReader(isr);
  PrintWriter out=new PrintWriter(new FileWriter(f));
  String s=in.readLine();
  while(!s.equals("")) {
   out.println(s);
   s=in.readLine();
  }
  //用完了之後一定要關閉掉那些reader之類的東西
  out.flush();
//  out.close();
//  in.close();

上面的寫入使用的是printWriter,使用它的好處在於可以有緩衝,

因此可以加快讀取的速度,如果它讀取的資料不夠多的話,那麼它

是不會向檔案裡面寫入的,直到它讀取了它設定的預設的大小之後

在會自動的flush一下把當前裡面的內容輸出到檔案,為了證明上面

的結論可以做一個實驗.

 

第一步:把上面的flush和close全部註釋掉,這樣的話,如果資料少的話

,printWriter不會把當前的內容寫入到檔案中,在程式執行的時候輸入

少量字元,比如123然後再連續回車,這樣程式結束後到指定的目錄下

去檢視檔案,會發現檔案是空的,因為資料太少了,所以程式沒來得及

輸出就結束了

 

第二步:同樣的操作,隨便把flush或者是close開啟,再去執行第一步

的操作,檔案裡面都是有記錄的,因為close或者flush都會使程式把

當前的內容全部輸出出去.

相關文章