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<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 类解决

posted @ 2019-07-13 21:07  Mirror王宇阳  阅读(313)  评论(0编辑  收藏  举报