1.System类对I/O的支持
系统输出System.out.println 是利用了I/O流的模式完成的。实际是打印流PrintStream对象
System类中定义了三个操作的常量
1.标准/系统输出(显示器)
public final static PrintStream out
1
2.标准错误输出,也是打印流对象,除了颜色是红色外与System.out 别无二致
public final static PrintStream err
1
3.标准输入(键盘)是 InputStream对象,没有任何包装
public final static InputStream in
1
2.两种输入流
由于JDK 1.0提供的System.in 太难用
JDK1.1之后扩展了BufferedReader 类 JDK 1.5之后提供了java.util.Scanner类
2.1BufferedReader类
BufferedReader类属于一个缓冲输入流,而且是一个字符流的操作对象。在Java中对于缓冲区流也分为两类:字节缓冲流(BufferedInputStream)、字符缓冲流(BufferedReader)
BufferedReader 类的定义和构造方法
public class BufferReader extends Reader//定义
public BufferedReader(Reader in)//构造方法
1
2
BufferedReader类提供如下方法 可以直接读取一行数据(以回车为换行符)
String readLine() throws IOException
1
代码示例
package JAVASE.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* @Name:练习BufferedReader系统输入类
* @Author:ZYJ
* @Date:2019-05-19-20:18
* @Description:
*/
public class BufferedReaderTest {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入信息:");
String str = buf.readLine();//默认回车换行
System.out.println("输入信息为:"+str);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2.2 java.util.Scanner 类
打印流解决的是OutputStream 类的缺陷,BufferedReader解决的是InputStream类的缺陷。而Scanner解决的是BufferedReader类的缺陷,
Scanner是一个专门进行输入流处理的程序类,利用这个类可以方便的处理各种数据类型,同时也可以结合正则表达式进行各项处理。
2.2.1 方法
1.判断是否含有指定数据
public boolean hasNextXxx()//各种数据类型
1
2.取得指定的数据类型
public 数据类型 nextXxx()
1
3.定义分隔符
public Scnner useDelimiter(Pattern pattern)
1
4.构造方法
public Scnner(InputStream source)
1
代码示例 :使用Scanner类实现数据输入
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scnner 类的练习
* @Author:ZYJ
* @Date:2019-05-22-10:43
* @Description:
*/
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
//输入内容判空操作
if (scanner.hasNext()) {
//取得指定的输入流
System.out.println("输入的内容为" + scanner.next());
}
//关闭流
scanner.close();
}
}
//默认以
结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
代码示例:使用Scanner类接收其他数据类型数据
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scanner 与任意类型的转换
* @Author:ZYJ
* @Date:2019-05-22-11:32
* @Description:
*/
public class ScannerPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄");
if(scanner.hasNext()){
int age = scanner.nextInt();
System.out.println("年龄为:"+age+"岁");
}else{
System.out.println("输入内容非法");
}
scanner.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2.2.2 Scanner类与正则表达式
**正则表达式:**是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
可以通过正则表达式,从字符串中获取我们想要的特定部分。
Scanner 类可以对接受的数据类型使用正则表达式判断
代码示例:利用正则表达式进行判断
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scanner类练习
* @Author:ZYJ
* @Date:2019-05-22-11:22
* @Description: 利用正则表达式进行判断
*/
public class TestPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入生日:");
if(scanner.hasNext("\d{4}-\d{2}-\d{2}")){
//取得指定输入流,并将其转化为字符串
String birthday = scanner.next();
System.out.println("输入的生日为:"+birthday);
}else{
System.out.println("输入格式非法,不是生日!!!");
}
//关闭流
scanner.close();
}
}
---------------------