标准的输入输出流的测试
这里我们通过两个程序来理解什么是标准的输入输出流以及标准的输入输出流在何种情况下使用
eg:1
问题: 从键盘输入一个字符串,要求将读取到的整行字符串转换为大写之后输出,然后继续进行输入操作,知道输入"e"或者输入"exit"的时候退出程序
- 我们分析这个问题之后其实可以想到,这个问题的解决方法一共有两种:
- 使用Scanner来实现,调用Scanner类中的next()方法就可以读取从控制台输入的一个字符串
- 使用System.in来实现
- System.in —> 转换流 —> BufferedReader(),然后调用BufferedReader类中的readLine()方法
package IO流.标准的输入输出流;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Demo1 {
/*
这里我们将异常对象抛出了,并没有使用try -- catch -- finally,但是在实际编程中我们应该使用try --- catch -- finally去解决
这里发生的异常,这个时候我们为了条例清晰就使用了throws + 异常对象的方式将异常对象直接抛出了
*/
public static void main(String[] args) throws IOException {
/*
创建转换流对象,负责将我们的标准输入流转换为字符流
*/
InputStreamReader isr = new InputStreamReader(System.in);
/*
创建缓冲字符输入流,将我们的转换流封装起来
通过这种方式我们就可以使用字符缓冲输入流每次读取控制台上一行的数据
*/
BufferedReader br = new BufferedReader(isr);
while(true){
/*
每次读取的一行数据,不包含换行符
*/
String data = br.readLine();
//判断程序是否要终止
if("e".equalsIgnoreCase(data) || "exit".equalsIgnoreCase(data)) {
System.out.println("程序终止");
break;
}
/*
将读入的字符串转换为大写之后输出
*/
String upperCase = data.toUpperCase();
System.out.println(upperCase);
}
/*
关闭流资源
*/
br.close();
}
}
eg:2.
问题:创建一个MyInput.java,包含从键盘读取byte,short,int,double ,float,boolean,String等数据类型的数据的方法
- 我们的Scanner类就是完成了这样的一个功能
package IO流.标准的输入输出流;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class MyInput {
/*
从键盘上读取一行的数据,以字符串形式返回
*/
public static String readString(){
/*
首相通过转换流将标准输入流转换为字符流,然后通过字符缓冲流将字符流封装起来
这里我们的转换流转换的是标准字符流,而我们的标准字符流是默认从控制台进行输入的
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = "";
try{
s = br.readLine();
}catch(IOException e){
e.printStackTrace();
}
return s;
}
//从键盘上读取byte类型的数据
public static byte readByte(){
//通过基本类型类型包装类通过parseXxx()方法将String类型的数据转换为对应的xxx类型
//就比如这里通过使用Byte包装类中的parseByte()方法将String类型的数据转换为对应的byte类型
return Byte.parseByte(readString());
}
public static short readShort(){
//同上
return Short.parseShort(readString());
}
public static int readInt(){
//同上
return Integer.parseInt(readString());
}
public static float readFloat(){
//同上
return Float.parseFloat(readString());
}
public static double readDouble(){
//同上
return Double.parseDouble(readString());
}
public static boolean readBoolean(){
//同上
return Boolean.parseBoolean(readString());
}
}