您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
〖第12章:JAVA IO〗_IO操作实例
发布时间:2020-12-29 14:31:34编辑:雪饮阅读()
实例1:
接收键盘输入,接收两个操作数,然后进行加法计算。
由于接收键盘输入的数据是字符,而不是int类型,所以要用Integer包装类的parseInt来解析。
import java.io.*;
public class Hello{
public static void main(String args[]) throws Exception{
BufferedReader buf =new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入第一个数字:") ;
String str = buf.readLine() ; // 接收数据
int i = Integer.parseInt(str) ; // 将字符串变为整数
System.out.print("请输入第二个数字:") ;
String str2 = buf.readLine() ;
int j = Integer.parseInt(str2) ;
System.out.println(i + " + " + j + " = " + (i + j)) ;
}
};
实例2:
扩展实例1,实例1仅仅只能处理用户输入string类型的整型数字,并且用户若输入的不是数字则会抛出异常。
所以需要写一个类,当这个类构造的时候就开始监听键盘输入,并且该类提供对各种数值类型的兼容检查(用正则)
则假定为InputData.java:
import java.io.* ;
import java.util.* ;
import java.text.* ;
public class InputData{
private BufferedReader buf = null ;
public InputData(){// 只要输入数据就要使用此语句
this.buf = new BufferedReader(new InputStreamReader(System.in)) ;
}
public String getString(String info){ // 得到字符串信息
String temp = null ;
System.out.print(info) ; // 打印提示信息
try{
temp = this.buf.readLine() ; // 接收数据
}catch(IOException e){
e.printStackTrace() ;
}
return temp ;
}
public int getInt(String info,String err){ // 得到一个整数的输入数据
int temp = 0 ;
String str = null ;
boolean flag = true ; // 定义一个标记位
while(flag){
str = this.getString(info) ; // 接收数据
if(str.matches("^\\d+$")){ // 判断是否由数字组成
temp = Integer.parseInt(str) ; // 转型
flag = false ; // 结束循环
}else{
System.out.println(err) ; // 打印错误信息
}
}
return temp ;
}
public float getFloat(String info,String err){ // 得到一个小数的输入数据
float temp = 0 ;
String str = null ;
boolean flag = true ; // 定义一个标记位
while(flag){
str = this.getString(info) ; // 接收数据
if(str.matches("^\\d+.?\\d+$")){ // 判断是否由数字组成
temp = Float.parseFloat(str) ; // 转型
flag = false ; // 结束循环
}else{
System.out.println(err) ; // 打印错误信息
}
}
return temp ;
}
public Date getDate(String info,String err){ // 得到一个小数的输入数据
Date temp = null ;
String str = null ;
boolean flag = true ; // 定义一个标记位
while(flag){
str = this.getString(info) ; // 接收数据
if(str.matches("^\\d{4}-\\d{2}-\\d{2}$")){ // 判断是否由数字组成
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
try{
temp = sdf.parse(str) ; // 将字符串变为Date型数据
}catch(Exception e){}
flag = false ; // 结束循环
}else{
System.out.println(err) ; // 打印错误信息
}
}
return temp ;
}
};
那么主程序则如:
import java.io.*;
public class Hello{
public static void main(String args[]) throws Exception{
//InputData构造时候就开始监听键盘输入了
InputData input = new InputData() ;
int i = input.getInt("请输入第一个数字:","输入的数据必须是数字,请重新输入!") ;
int j = input.getInt("请输入第二个数字:","输入的数据必须是数字,请重新输入!") ;
System.out.println(i + " + " + j + " = " + (i + j)) ;
}
};
则编译时候需要先编译InputData类
D:\>javac InputData.java
D:\>javac Hello.java
D:\>java Hello
请输入第一个数字:x
输入的数据必须是数字,请重新输入!
请输入第一个数字:y
输入的数据必须是数字,请重新输入!
请输入第一个数字:
输入的数据必须是数字,请重新输入!
请输入第一个数字:1
请输入第二个数字:2
1 + 2 = 3
注意:如果先编译了主类然后再编译了InputData类,则若不生效的时候需要重新再编译下主类。另外一个就是这里不需要用导入,只要在同一个目录就行了,因为InputData类也并没有声明以包的形式存在。
实例3:
实现一个字符界面的菜单显式并有菜单选择动作响应交互,仅仅响应交互不具体的逻辑计算。
既然有菜单项选择(例如序号0、1、2等)则还是依赖于用户的输入,那么这里可以复用上面InputData类。
菜单类实现的时候还需要注意,当每次交互完成后要重新弹出菜单字符界面。所以也就是说监听键盘交互是一个死循环。(监听…输出、监听…输出。。。。,若中途有某个菜单项的交互响应也会输出,但是不会影响主菜单的循环输出)
那么假定菜单类的实现为Menu.java:
public class Operate{
public static void add(){ // 增加操作
System.out.println("** 选择的是增加操作") ;
}
public static void delete(){ // 删除操作
System.out.println("** 选择的是删除操作") ;
}
public static void update(){ // 更新操作
System.out.println("** 选择的是更新操作") ;
}
public static void find(){ // 查看操作
System.out.println("** 选择的是查看操作") ;
}
};
public class Menu{
public Menu(){
while(true){
this.show() ; // 无限制调用菜单的显示
}
}
public void show(){
System.out.println("===== Xxx系统 =====") ;
System.out.println(" [1]、增加数据") ;
System.out.println(" [2]、删除数据") ;
System.out.println(" [3]、修改数据") ;
System.out.println(" [4]、查看数据") ;
System.out.println(" [0]、系统退出\n") ;
InputData input = new InputData() ;
int i = input.getInt("请选择:","请输入正确的选项!") ;
switch(i){
case 1:{
Operate.add() ; // 调用增加操作
break ;
}
case 2:{
Operate.delete() ; // 调用删除操作
break ;
}
case 3:{
Operate.update() ; // 调用更新操作
break ;
}
case 4:{
Operate.find() ; // 调用查看操作
break ;
}
case 0:{
System.exit(1) ; // 系统退出
break ;
}
default:{
System.out.println("请选择正确的操作!") ;
}
}
}
};
然后主程序就很简单了:
import java.io.*;
public class Hello{
public static void main(String args[]) throws Exception{
new Menu();
}
};
D:\>javac Menu.java
D:\>javac Hello.java
D:\>java Hello
===== Xxx系统 =====
[1]、增加数据
[2]、删除数据
[3]、修改数据
[4]、查看数据
[0]、系统退出
请选择:1
** 选择的是增加操作
===== Xxx系统 =====
[1]、增加数据
[2]、删除数据
[3]、修改数据
[4]、查看数据
[0]、系统退出
请选择:
因为之前编译过InputData类,所以这里不需要再重新编译。
关键字词:java,IO