控制台输入是通过从System.in
读取来完成的。为了获得与控制台关联的基于字符的流,可以在BufferedReader
对象中封装System.in
。
其构造函数如下 : BufferedReader(Reader inputReader)
而System.in
是一个字节流,需要通过转换流InputStreamReader
来转换成字符流,具体的代码如下 :
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
推荐在创建InputStreamReader
时指定与控制台相关联的字符集。字符集定义了字节映射到字符的方式。如果不指定字符集会使用JVM默认的字符集。
InputStreamReader(InputStream inputStream, Charset charset)
2.1 读取字符
为了从BufferedReader
对象获取字符,需要使用read
方法。
int read() throws IOException
下面是一个示例程序
package LearnIO;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 测试
*
* @author cat
* @version 2025/2/27 16:43
* @since JDK17
*/
public class Test01 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char c;
do {
c = ((char) reader.read());
System.out.println(c);
} while (c != 'q');
}
}
输出 :
abcdeq // 这一行是我的输入
a
b
c
d
e
q
在默认情况下,System.in
是按行缓冲的,这意味着在你按下换行之前,实际上没有输入传到程序。
2.2 读取字符串
为了从键盘读取字符串,可使用BufferedReader
类的readLine
方法,String readLine() throws IOException
package LearnIO;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 使用readLine方法
*
* @author cat
* @version 2025/2/27 17:01
* @since JDK17
*/
public class UseReadLine {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str;
do {
str = reader.readLine();
System.out.println(str);
} while (!"stop".equals(str));
}
}
输出 :
曲·启明
曲·启明
露西亚·誓焰
露西亚·誓焰
stop
stop