关闭 Java 中的 Scanner

Rupam Yadav 2023年1月30日 2020年12月19日
  1. 在 Java 中在打印完用户的标准输入后,关闭一个 Scanner
  2. 在打印一个指定的字符串后关闭 Java 中的 Scanner
  3. 在 Java 中使用 close() 方法读取文件内容后关闭 Scanner
关闭 Java 中的 Scanner

在本教程中,我们将学习如何在 Java 中关闭 Scanner,以及何时应该使用它。Scanner 类有一个 close() 方法,特别是用来关闭打开的 Scanner。即使我们不显式调用 close() 方法,也会调用 Closeable 接口,关闭流。显式关闭 Scanner 是一个很好的做法。

下面的例子显示了我们如何以及何时可以使用 Scanner.close() 方法。

在 Java 中在打印完用户的标准输入后,关闭一个 Scanner

在下面的代码中,我们已经创建了一个 Scanner 对象 in,它在构造函数中从用户那里接收 System.in 标准输入。方法 nextLine() 返回跳过的输入。它读取整个输入行,直到行尾,包括空格和行分隔符。

输入的内容被打印出来,然后我们通过调用 close() 方法关闭 Scanner 对象 in。当 Scanner 被关闭后,如果我们要像下面对 myString2 那样使用 in,它会抛出一个异常,因为流或 Scanner 已经被关闭。

import java.util.Scanner; 

public class CloseScanner {
    public static void main (String [] args){
      
        Scanner in = new Scanner (System.in);
        System.out.print ("Enter a String: ");
      
        String mystring = in.nextLine();
        System.out.println("The String you entered is: " + mystring);
        in.close();
          
        String myString2 = in.nextLine();
        System.out.println(myString2);
          
    }
}

输出:

Enter a String: the cat is white
The String you entered is: the cat is white

Exception in thread "main" java.lang.IllegalStateException: Scanner closed
	at java.base/java.util.Scanner.ensureOpen(Scanner.java:1150)
	at java.base/java.util.Scanner.findWithinHorizon(Scanner.java:1781)
	at java.base/java.util.Scanner.nextLine(Scanner.java:1649)
	at com.company.Main.main(Main.java:20)

在打印一个指定的字符串后关闭 Java 中的 Scanner

在这个例子中,我们将使用\nnextLine() 把字符串 s 分成不同的行。\n 用来表示新的行,当 scanner.nextLine() 注意到新的行时,它移动到新行,然后打印出来。这样输出的时候,s 中的三个科目都在不同的行中。

这种情况下,我们可能需要调用 close() 方法,因为我们不希望 scanner 再扫描任何新行。

import java.util.Scanner;

public class CloseScanner {
    public static void main (String [] args){
        try {
            String s = " English \n Maths \n Science ";
            Scanner scanner = new Scanner(s);
            System.out.println(scanner.nextLine());
            System.out.println(scanner.nextLine());
            System.out.println(scanner.nextLine());

            scanner.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

输出:

 English 
 Maths 
 Science 

在 Java 中使用 close() 方法读取文件内容后关闭 Scanner

建议我们在读取文件时,总是关闭 Scanner。它可以确保没有打开任何输入或输出流,而这些流没有被使用。下面的例子显示了我们如何从文件中读取一个字符串,然后在操作完成后关闭 Scanner

import java.io.File;
import java.util.Scanner;

public class CloseScanner {
    public static void main (String [] args){
      
        try {
            File file = new File("/Users/john/Documents/Example.txt");
            Scanner scanner = new Scanner(file);
            StringBuffer sb = new StringBuffer();
            while (scanner.hasNext()) {
                sb.append(" " + scanner.nextLine());
            }
            System.out.println(sb);
          	scanner.close();
        }
        catch(Exception e){
                System.out.println(e.getMessage());
        }
      
    }
}

输出:

Hello, You are in a text file.
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相关文章 - Java Scanner