Java - IO 扫描流:Scanner

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
  • 构造方法:

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)