zoukankan      html  css  js  c++  java
  • JAVA 的IO操作实例

    实例要求:

    1,加法操作:

    键盘输入两个数字,完成加法操作。因为从键盘接收过来的内容都是通过字符串形式存放的,所以此时直接通过包装类

    Integer将字符串变为基本数据类型。

    2,菜单显示:

    采用的知识点:

    1,键盘输入数据的标准格式。

    2,日期格式的转换。

    3,类的设计思路。

    具体内容:

    实例1:加法操作:

    遇到问题后,先开发一个简单模型:

    package 类集;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Filloutput {
    
        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)) ;
        }
    }

    以上确实完成功能:但是存在问题:

    1,现在信息是用户输入,如果输入不是数字呢?

    2,本程序只能输入整数。

    3,代码重复,多次使用BufferedReader。

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

    输入数据,最常见整数,小数,日期。字符串,最好设计一个专门输入数据类型。完成输入数据功能,在类中可以对输入数据验证

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

    下面都是通过正则表达式对输入数据进行验证,并且通过while,来循环调用输入,设置标志结束循环

    package 类集;
    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 ;
        }
    };

    以上的日期转换操作,非常重要。在开发中都要使用到

    重新写输入的类调用上面的类。

    package 类集;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Filloutput {
    
        public static void main(String args[]) throws Exception{
            int i = 0 ;
            int j = 0 ;
            InputData input = new InputData() ;
            i = input.getInt("请输入第一个数字:","输入的数据必须是数字,请重新输入!") ;
            j = input.getInt("请输入第二个数字:","输入的数据必须是数字,请重新输入!") ;
            System.out.println(i + " + " + j + " = " + (i + j)) ;
        }
    }

    与之前代码相比,此处更合理,因为只要想从键盘输入整数,直接使用InputData即可。

    测试输入日期:

    package 类集;
    import java.util.Date;
    public class Filloutput {
    
        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) ;
        }
    }

    测试输入小数:

    package 类集;
    import java.util.Date;
    public class Filloutput {
    
        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) ;
        }
    }

    实例2:菜单显示:

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

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

    需要一个Menu类显示菜单,但是在显示的时候因为每一操作完成后都应该把菜单显示出来。所以肯定是循环调用的过程。

    操作类:

    package 类集;
    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("** 选择的是查看操作") ;
        }
    };

    菜单类:

    package 类集;
    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]、系统退出
    ") ;
            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("请选择正确的操作!") ;
                }
            }
        }
    };

    真正调用菜单类,菜单类里面执行输入操作,再调用操作类,

    package 类集;
    public class Filloutput {
    
        public static void main(String args[]) throws Exception{
            new Menu() ;
        }
    }
  • 相关阅读:
    PHP中遍历stdclass object
    php获取post中的json数据
    PHP的范围解析操作符(::)的涵义
    编程笔记之—sina&tqq api—MBApiClient 与 WeiboClient 冲突
    asp.net开发mysql注意事项
    vs2010 和 svn的结合运用,svn的安装
    asp.net 调用 mysql 存储过程 MySql.Data.MySqlClient.MySqlException: Unhandled type encountered
    asp.net 调用 mysql 分页存储过程,repeater使用mysql分页存储过程,mysql 存储过程的注意事项
    如何把其他项目中编写好的 自定义控件 放到自己的项目里面使用 (MultiListBox ASP.NET控件)
    jqPlot——基于jquery的图表绘制工具简单使用,jqPlot 在firefox 火狐浏览器里面,图表右侧的标题,变形的解决方法
  • 原文地址:https://www.cnblogs.com/alsf/p/7192495.html
Copyright © 2011-2022 走看看