实例要求:

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

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

package 类集;
public class Filloutput { public static void main(String args[]) throws Exception{
new Menu() ;
}
}

JAVA 的IO操作实例的更多相关文章

  1. Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式

    解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...

  2. 1.5 JAVA的IO操作

    1.5 JAVA的IO操作 参考链接:https://www.runoob.com/java/java-files-io.html 一.JAVA的IO操作 由于JAVA引用外界的数据,或是将自身的数据 ...

  3. Java之IO操作总结

    所谓IO,也就是Input与Output的缩写.在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节 对于文件内容的操作主要分为两大类 分别是: 字符流 字节流 ...

  4. Java 基本IO操作

    1.基本IO操作     有时候我们编写的程序除了自身会定义一些数据信息外,还需要引用外界的数据,或是将自身的数据发送到外界,这时我们需要使用输入与输出. 1)输入与输出       输入:是一个从外 ...

  5. java的IO操作:字节流与字符流操作

    流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输 ...

  6. Java 文件 IO 操作

    window 路径分割符: \ 表示 windows 系统文件目录分割符 java 代码在 windows 下写某个文件的话需要下面的方式 D:\\soft\\sdclass.txt  其中一个单斜杠 ...

  7. Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

  8. JAVA的IO操作:内存操作流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...

  9. java的IO操作:System类对IO的支持。

    目标: 1,掌握SYStem对IO的三种支持: system.out system.in system.err 2,掌握system.out及system.err的区别. 3,掌握输入,输出重定向. ...

随机推荐

  1. 在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘

    1.在WINDOWS服务器中创建NFS SERVER 首先,打开服务管理器,选择添加角色:     选中文件服务,下一步:     出现一个提示,不管它,继续下一步:     在接下来的页面中选中“网 ...

  2. js处理富文本编辑器转义、去除转义、去除HTML标签

    富文本编辑器生成的HTML标签,进行转义,然后写入数据库,防止脚本注入: function htmlEncode(value){ return $('<div/>').text(value ...

  3. php判断检测一个数组里有没有重复的值

    php判断检测一个数组里有没有重复的值 php里有一个处理数组重复值得函数array_unique,我们的思路就是用这个函数来实现的. if (count($array) != count(array ...

  4. hdu1269(有向图强连通分量)

    hdu1269 题意 判断对于任意两点是否都可以互相到达(判断有向图强连通分量个数是否为 1 ). 分析 Tarjan 算法实现. code #include<bits/stdc++.h> ...

  5. CentOS 7.1 中文正式版下载 - 最流行的免费开源企业级 Linux 服务器操作系统

    如果说 Ubuntu 是现今最受桌面用户欢迎的 Linux 操作系统,那么 CentOS 就是最受公司.企业.IDC 喜爱的 Linux 发行版了.得益于极为出色的稳定性,全球范围内无数著名网站均选用 ...

  6. 安网讯通签约孟强美容CRM

    整形美容CRM软件是辽宁安网讯通有限公司为孟强整形医院定制开发的一套客户关系管理软件,软件专门针对整形美容行业专科门诊的需求,能满足大中小整形美容机构或或各种专科科室的日常业务需求. 主要功能包括: ...

  7. [HTML/CSS]盒子模型,块级元素和行内元素

    目录 概述 盒子模型 块级元素 行内元素 可变元素 总结 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项 ...

  8. 针对标签中设置 disabled="true",$("#id").serialize()获取不到value的解决方法

    今天给<select>增加disabled="true", 发现$("#form").serialize()的结果不包含select标签的值,解决办 ...

  9. mybatis入门基础----动态SQL

    原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 m ...

  10. Android消息机制探索(Handler,Looper,Message,MessageQueue)

    概览 Android消息机制是Android操作系统中比较重要的一块.具体使用方法在这里不再阐述,可以参考Android的官方开发文档. 消息机制的主要用途有两方面: 1.线程之间的通信.比如在子线程 ...