Java IO操做——专门的数据输入类Scanner(java.util工具包中)的具体使用

学习目标

掌握Scanner类的使用
使用Scanner接收输入数据

Scanner类简介

在JDK1.5以后JAVA提供了专门的输入数据类,此类能够完成BufferedReader类的功能。也能够方便的对输入数据进行验证。此类存放在java.util工具包中。
一、public Scanner(File source) throws FileNotFoundException 构造方法 从文件中接收内容。
二、public Scanner(InputStream source) 构造方法 从指定的字节输入流中接收内容。
三、public boolean hasNext(Pattern pattern)普通方法 判断输入的数据是否符合指定的正则标准
四、public booean hasNextFloat() 普通方法 判断输入的是不是小数
五、public boolean hasNextInt() 普通方法 判断输入的是不是整数
六、public String next()普通 接收内容
七、public String next(Pattern pattern) 普通 接收内容,进行正则验证
八、public int nextInt() 普通 接收整数
九、public float nextFloat() 接收小数
十、public Scanner useDelimiter(String pattern) 普通 设置读取的分隔符

此类不在java.io包中,而在java.util包中,因此,此类是一个工具类
使用Scanner接收键盘的输入数据:
import java.util.* ;
public class ScannerDemo01{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		System.out.print("输入数据:") ;
		String str = scan.next() ;	// 接收数据
		System.out.println("输入的数据为:" + str) ;
	}
};


比直接使用BufferedReader更加方便。可是,以上输入数据代码其实是存在问题的。
若是输入数据之间存在空格,则会以空格为分隔符。以下所示:

若是要想输入空格的话,就必须修改分隔符,将分隔符改成"\n",使用如下方法完成
public ScanneruseDelimiter(String pattern)
修改分隔符:
import java.util.* ;
public class ScannerDemo02{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		System.out.print("输入数据:") ;
		scan.useDelimiter("\n") ;
		String str = scan.next() ;	// 接收数据
		System.out.println("输入的数据为:" + str) ;
	}
};

以前的输入数据都是以字符串的形式返回的,实际上使用Scanner类也能够方便的直接返回整数或者是小数。
有如下的方法:
(1)接收整数:
|- 判断是不是整数:public boolean hasNextInt() 判断是不是整数,若是是则返回true。
|-接收数据:public int nextInt()
(2) 接收小数
|- 判断是不是小数:public boolean hasNextFloat() 判断是不是小数,若是是则返回true。
|-接收数据:public float nextFloat()
import java.util.* ;
public class ScannerDemo03{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		int i = 0 ;
		float f = 0.0f ;
		System.out.print("输入整数:") ;
		if(scan.hasNextInt()){	// 判断输入的是不是整数
			i = scan.nextInt() ;	// 接收整数
			System.out.println("整数数据:" + i) ;
		}else{
			System.out.println("输入的不是整数!") ;
		}
		System.out.print("输入小数:") ;
		if(scan.hasNextFloat()){	// 判断输入的是不是小数
			f = scan.nextFloat() ;	// 接收小数
			System.out.println("小数数据:" + f) ;
		}else{
			System.out.println("输入的不是小数!") ;
		}
	}
};
Scanner这个类虽然能够接收各类类型,可是对于日期型的数据却没法接收。
若是要想接收Date类型的数据,则只能经过字符串转型,可是在接收的时候依然可使用Scanner类中提供的方法进行验证:
验证:public String hasNext(Pattern pattern)
接收:public String next(String pattern)
import java.util.* ;
import java.text.* ;
public class ScannerDemo04{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in) ;	// 从键盘接收数据
		String str = null ;
		Date date = null ;
		System.out.print("输入日期(yyyy-MM-dd):") ;
		if(scan.hasNext("^\\d{4}-\\d{2}-\\d{2}$")){	// 判断
			str = scan.next("^\\d{4}-\\d{2}-\\d{2}$") ;	// 接收
			try{
				date = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
			}catch(Exception e){}
		}else{
			System.out.println("输入的日期格式错误!") ;
		}
		System.out.println(date) ;
	}
};

还能够直接从文件中读取信息。
假设:d:\test.txt文件
文件内容

使用Scanner直接读取文件的内容
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class ScannerDemo05{
	public static void main(String args[]){
		File f = new File("D:" + File.separator + "test.txt") ;	// 指定操做文件
		Scanner scan = null ;
		try{
			scan = new Scanner(f) ;	// 从键盘接收数据
		}catch(Exception e){}
		StringBuffer str = new StringBuffer() ;
		while(scan.hasNext()){
			str.append(scan.next()).append('\n')	;	//	取数据
		}
		System.out.println("文件内容为:" + str) ;
	}
};

在使用Scanner读取文件的时候,要考虑到换行的功能。

总结:

一、掌握Scanner类的做用:方便的读取数据。
二、在读取操做的时候必定要注意分隔符的影响。