Scanner 是作为一个扫描器,它能够以标准格式以及扫描器语言环境的格式的指定文件、流中读取数据。
常用构造方法:
Scanner(File source):构造一个新的 Scanner,它生成的值是从指定文件扫描的
Scanner(InputStream source):构造一个新的 Scanner,它生成的值是从指定的输入流扫描的
Scanner(Readable source):构造一个新的 Scanner,它生成的值是从指定源扫描的
Scanner(String source):构造一个新的 Scanner,它生成的值是从指定字符串扫描的
而默认情况下是从键盘输入的数据中扫描,即 System.in 这其实 是 System类中的一个输入流。
Demo:
1 @Test
2 public void test01(){
3 Scanner input = new Scanner(System.in);
4 System.out.print("请输入一个整数:"); //从键盘输入
5 int num = input.nextInt();
6 System.out.println("num = " + num);
7 input.close();
8 }
9
10 @Test
11 public void test02() throws FileNotFoundException{
12 Scanner input = new Scanner(new FileInputStream("1.txt"));//InputStream
13
14 while(input.hasNextLine()){
15 String line = input.nextLine();
16 System.out.println(line);
17 }
18
19 input.close();
20 }
21
22 @Test
23 public void test03() throws FileNotFoundException{
24 Scanner input = new Scanner(new File("1.txt")); //InputStream
25
26 while(input.hasNextLine()){
27 String line = input.nextLine();
28 System.out.println(line);
29 }
30
31 input.close();
32 }
33
34 @Test
35 public void test04() throws FileNotFoundException{
36 Scanner input = new Scanner("1.txt"); //InputStream
37
38 while(input.hasNextLine()){
39 String line = input.nextLine();
40 System.out.println(line);
41 }
42
43 input.close();
44 }
45
46
47 @Test
48 public void test05() throws FileNotFoundException{
49 Scanner input = new Scanner(new File("d:/1.txt"),"GBK");//使用InputStream,并指定字符集
50
51 while(input.hasNextLine()){
52 String line = input.nextLine();
53 System.out.println(line);
54 }
55
56 input.close();
57 }
进入到 System 类中,发现里面有三个常量字段。
“标准”输入流 System.in
“标准”输出流 System.out
“标准”错误输出流 System.err
可以看到这三个字段都用 final修饰的,是常量,并被赋值为 null,但是打印的时候,它们并不是 null。
接着发现了这三个方法:
通过上面的这些方法可以看到,上面的三个字段,在Java层面是常量对象,但是底层调用本地方法(调用C等底层语言)进行修改了。
而对于输出流 Out,我们还以为给它指定一个新的目标。
Demo:
1 @Test
2 public void test01(){
3 PrintStream out = System.out;
4 System.out.println(out);
5 }
6 @Test
7 public void test02() throws FileNotFoundException{
8 System.setOut(new PrintStream("1.txt")); //指定输出流
9
10 System.out.println("aaaa");
11 System.out.println("bbb");
12 System.out.println("ccc");
13 System.out.println("ddd");
14 }
原文:https://www.cnblogs.com/niujifei/p/12244950.html