System类对IO的支持

1.System类对I/O的支持

系统输出System.out.println 是利用了I/O流的模式完成的。实际是打印流PrintStream对象

System类中定义了三个操作的常量

1.标准/系统输出(显示器)

public final static PrintStream out

2.标准错误输出,也是打印流对象,除了颜色是红色外与System.out 别无二致

public final static PrintStream err

3.标准输入(键盘)是 InputStream对象,没有任何包装

public final static InputStream in

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)//构造方法

BufferedReader类提供如下方法 可以直接读取一行数据(以回车为换行符)

String readLine() throws IOException

代码示例

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

2.2 java.util.Scanner 类

打印流解决的是OutputStream 类的缺陷,BufferedReader解决的是InputStream类的缺陷。而Scanner解决的是BufferedReader类的缺陷,

Scanner是一个专门进行输入流处理的程序类,利用这个类可以方便的处理各种数据类型,同时也可以结合正则表达式进行各项处理。

2.2.1 方法

1.判断是否含有指定数据

public boolean hasNextXxx()//各种数据类型

2.取得指定的数据类型

public 数据类型 nextXxx()

3.定义分隔符

public Scnner useDelimiter(Pattern pattern)

4.构造方法

public Scnner(InputStream source)

代码示例 :使用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();
    }
}
//默认以\n结束

代码示例:使用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();
    }
}
2.2.2 Scanner类与正则表达式

**正则表达式:**是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

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();
    }
}
2.2.3 Scanner 操作文件

Scanner类可以接收 InputStream对象,也就意味着Scanner类可以接收任意数据类型。

package JAVASE.IOtext;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;

/**
 * @Name: 使用Scanner类操作 文件
 * @Author:ZYJ
 * @Date:2019-05-22-16:06
 * @Description:  熟悉Scanner类的 hasNext() nex
 */
public class ScannerFileTest {
    public static void main(String[] args) throws FileNotFoundException {
        //取得操作文件
       File file = new File("C:\\Users\\ZYJ\\Desktop\\javaIO\\ioTest\\hello.txt");
       //获取输入流
       InputStream in = new FileInputStream(file);
       //实例化Scanner类
       Scanner scanner = new Scanner(in);
       //自定义分隔符
       scanner.useDelimiter("\n");
       while (scanner.hasNext()){
           System.out.println(scanner.next());
       }
       //关闭流
       scanner.close();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值