1. 程式人生 > >JAVA中IO流 (讀取鍵盤錄入的詳細講解)

JAVA中IO流 (讀取鍵盤錄入的詳細講解)

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);//繼續等待鍵盤的錄入
		}
	}
}

結果

在這裡插入圖片描述