〖JAVA IO〗_IO操作实例笔记

本章目标:
掌握java数据数据的操作实例

实例一:加法操作

实例二:菜单显示

3.本实例主要采用的知识

1、键盘输入数据的标准格式
2、日期的转换,以及包装类的使用
3、类的设计思路。

4.具体内容

实例一代码:

import java.io.*;
public class ExecDemo01{
    public static void main(String args[]) throws Exception{
        int i=0;
        int j=0;
        BufferedReader buf = null;
        buf = new BufferedReader(new InputStreamReader(System.in));
        String str=null;
        System.out.println("请输入第一个数字");
        str = buf.readLine();    //接收数据
        i = Integer.parseInt(str);
        System.out.println("请输入第二个数字");
        str = buf.readLine();    //接收数据
        j = Integer.parseInt(str);
        System.out.println(i+"+"+i+"="+(i+j));
    }
}





以上确实完成了,但是有以下问题:


    a.现在信息是由用户输入的,用户输入的如果不是数字呢?


    b.本程序只能输入整数


    c.代码重复,一使用输入数据,则肯定使用BufferedReader,所以代码重复了。



此时,需要对类进行更加合理的划分。


输入数据,最可能的是:整数、小数、日期、字符串,所以最好将其设计出一个专门的输入数据类型,完成输入数据的功能,而且在此类中还可以对输入的数据进行验证。


下面:完成专门处理输入数据的类,但是只能得到整数和字符串。



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 ;
    }
};





测试 InputDate类



import java.io.* ;
import java.util.* ;
public class TestInput{
    public static void main(String args[]) throws Exception{
        InputData input = new InputData() ;
        // float f = input.getFloat("请输入小数:","输入的不是小数,请重新输入!") ;
        // System.out.println("小数:" + f) ;
        Date d = input.getDate("请输入日期,格式为(yyyy-mm-dd):","输入的日期格式不正确,请重新输入") ;
        System.out.println("日期" + d) ;
    }
};





最终代码:



import java.io.* ;
public class ExecDemo01{
    public static void main(String args[]) throws Exception{
        int i = 0 ;
        int j = 0 ;
        BufferedReader buf = null ;        // 接收键盘的输入数据
        buf = new BufferedReader(new InputStreamReader(System.in)) ;
        String str = null ;    // 接收数据
        System.out.print("请输入第一个数字:") ;
        str = buf.readLine() ;    // 接收数据
        i = Integer.parseInt(str) ;    // 将字符串变为整数
        System.out.print("请输入第二个数字:") ;
        str = buf.readLine() ;    // 接收数据
        j = Integer.parseInt(str) ;    // 将字
        System.out.println(i + " + " + j + " = " + (i + j)) ;
    }
};







4.2、菜单显示



菜单显示在各个系统中都是比较常见的功能。


现在是要求一个菜单的显示,但是实际上每个选项之后都肯定会有自己的若干操作,所以为了方便操作,建立以下几个类:


Menu(专门显示菜单信息)  -> Operate(表示操作类)



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 ExecDemo03{
    public static void main(String args[]) throws Exception{
        new Menu() ;
    }
};