IO_扫描流:Scanner

在改进输出功能不足方面提供了打印流(PrintSream);利用BufferedReader类(缓冲输入流)解决了大文本数据的输入和读取操作,但是BufferedReader类在读取数据时只可以按照字符串方式读取(public String readLine();)且固定使用换行\n作为分隔符,由此暴露出BufferedReader类的功能不足以未来的大发展。

Scanner类

  • java.util.Scanner:(JDK 1.5

    • 专门负责解决输入流的操作问题
    public final class Scanner
    extends Object
    implements Iterator<String>
  • 构造方法:

public Scanner(File source)
public Scanner(InputStream source)
public Scanner(Readable source)
public Scanner(ReadableByteChannel source)
public Scanner(String source)
  • 类方法

判断是否有指定数据:

public boolean hasNextXxx();
// 举例:
public boolean hasNext();//表示有数据
public boolean hasNextDouble();//表述输入的是小数

取出数据:

public String nextXxx();
// 举例:
public String next();//默认返回字符串
public double nextDouble();//自动转型返回double数据

除了利用hasNextXxx() 和 nextXxx() 方法判断数据以外,在hasNext() 和 next() 方法中支持使用正则表达式对数据进判断

public boolean hasNext(regax);
public String next(regax);

实例:

public class TestDemo {
public static void main(String [] args) throws IOException {
// 准备接收键盘输入数据;System.in是InputStream型
Scanner scan = new Scanner(System.in);
if (scan.hasNextString()) {//判断是否有数据
System.out.println(scan.next()); //输出
}
scan.close();
}
}
  • 设置分隔符
public Scanner useDelimiter(String pattern);
public class TestDemo {
public static void main(String [] args) throws IOException {
Scanner scan = new Scanner(new FileInputStream(new File("F:"+File.separator+"demo"+File.separator+"demo.txt")));
scan.useDelimiter("\r\n");//设置 、\r\n 作为换行符
while(scan.hasNext()) {
System.out.println(scan.next());
}
scan.close();
}
}

总结

在读取数据的时候,综合角度:Scanner类 比 BufferedReader 简单;在发现Scanner无法实现的时候再使用BufferedReader

  • InputStream类的功能不足问题被 Scanner 类解决

  • Reader类的功能不足问题被 BufferedReader 类解决

  • OutputStream类的功能不足问题被 PrintStream 类解决

  • Writer类的功能不足问题被 PrintWrite 类解决

Java - IO 扫描流:Scanner的更多相关文章

  1. 【java】扫描流Scanner接收输入示例

    多用Scanner少用InputStream 多用BufferedReader少用Reader 多用PrintStream少用OutputStream 多用PrintWriter少用Writer pa ...

  2. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

  3. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  4. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  5. Java IO 过滤流 BufferedInput/OutputStream

    Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...

  6. Java IO 节点流 FileInput/OutputStream

    Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读 ...

  7. Java IO 理解流的概念

    Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取(INPUT)流从流读出数据( ...

  8. Java IO 节点流 ByteArrayInput/OutputStream

    Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...

  9. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

随机推荐

  1. centos基本信息和ssh

    CentOs系统基本配置,包括修改主机名,创建用户并授权,ssh免密登录 1 永久修改主机名 sudo vim /etc/hostname 把原主机名xxx改为master(在从主机上则改为相应的sl ...

  2. requests第三方库

    requests第三方库 简介: requests是一个优雅而简单的Python 第三方HTTP请求库,专为人类而构建. requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:ht ...

  3. 集合系列 Map(十二):HashMap

    HashMap 是 Map 基于哈希散列算法的实现,其在 JDK1.7 中采用了数组+链表的数据结构.在 JDK1.8 中为了提高查询效率,采用了数组+链表+红黑树的数据结构.本文所有讲解均基于 JD ...

  4. 14集超详细视频教程,手把手教你用数据神器Hawk!

    沙漠君在闭关4个月后,终于把开源数据神器Hawk(详细介绍在这里)的文档和教学视频基本录制完毕, 并同步更新在有爱无广告二次元的B站! 教程总时间超过3个小时,覆盖了网页采集器,数据清洗,文件读写等方 ...

  5. 小程序实现日期时间控件picker

    小程序自带的组件中有日期跟时间的picker,但就缺个日期时间picker组件,那没办法,只能自己弄一个,这个组件不是很难,比较难的地方是要根据不同年份(是否闰年)跟月份决定一个月里有多少天. 我直接 ...

  6. spark shell操作

    RDD有两种类型的操作 ,分别是Transformation(返回一个新的RDD)和Action(返回values). 1.Transformation:根据已有RDD创建新的RDD数据集build ...

  7. JavaScript 日期格式

    有四种 JavaScript 日期输入格式: 类型 实例 ISO 日期 "2018-02-19" (国际标准) 短日期 "02/19/2018" 或者 &quo ...

  8. ES6之Class类

    一.Class的基本语法 1.简介 基本上,ES6的class可以看作只是一个 语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让 对象原型 的写法更加清晰.更像面向对象编程的语法而 ...

  9. 白话 MVC、MVP、MVVP

    白话 MVC.MVP.MVVP 注意这里单纯的通过例子来讲解 MVC MVP MVVP 这三种架构模式的起源和作用,不牵扯某种特定的语言.具体到各种语言各种软件系统上体现有所不同,但是原理都是这样的. ...

  10. synchronized凭什么锁得住?

    相关链接: <synchronized锁住的是谁?> 我们知道synchronized是重量级锁,我们知道synchronized锁住的是一个对象上的Monitor对象,我们也知道sync ...