JAVA中IO流 (讀取鍵盤錄入的詳細講解)
阿新 • • 發佈:2018-12-12
java中鍵盤的錄入
System.out: 對應的是標準輸出裝置,控制檯
初級錄入
程式碼
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int by=in.read();
System.out.println(by);
}
}
結果
這裡輸出97是因為我們是Int 型
這時,我們多輸出幾個看看
程式碼
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int by1=in.read();
int by2=in.read();
int by3=in.read();
System.out.println(by1);
System.out.println(by2);
System.out.println(by3);
}
}
結果
上次我講到 一個回車就是\r\n 這樣子 而這裡的13就是\r 10就是\n
上述的錄入過於低效率,所以我們進行改進
需求 : 1.通過鍵盤錄入資料 2.當錄入一行資料後,就將該行資料進行列印 3.如果錄入的資料是over,那麼就停止錄入
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int ch=0;
while((ch=in.read())!=-1)
{
System.out.println(ch);
}
}
}
結果
此程式可以連續鍵盤寫入,但是卻不能停下來 ,需要用Ctrl +C 才可以退出
我們再次進行改進,一次性輸出
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;//繼續迴圈
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;//如果over,跳出迴圈
System.out.println(s.toUpperCase());//我們這裡為了區分鍵盤的寫入和輸出 就讓輸出表示為大寫
}
else
sb.append((char)ch);//繼續等待鍵盤的錄入
}
}
}
結果
到這裡我們發現,我們的程式好像並沒有實現它的全部功能,而且後面錄入的字元會和前面的記憶字元一起被列印稱為大寫輸出,輸入over 後也不能退出的現象。
這裡我們必須說明,這是因為我們沒有將上一次錄入的緩衝區的內容進行清除的原因。
利用delete 語句進行清除
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;//繼續迴圈
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;//如果over,跳出迴圈
System.out.println(s.toUpperCase());//我們這裡為了區分鍵盤的寫入和輸出 就讓輸出表示為大寫
sb.delete(0,sb.length());//清除緩衝區中所有的內容
}
else
sb.append((char)ch);//繼續等待鍵盤的錄入
}
}
}