Scanner类
大约 1 分钟algorithm
在 Java 中,java.util.Scanner 类提供了多种构造函数,可以接受不同类型的参数来指定扫描源。以下是它主要支持的参数类型:
1. 输入流 (InputStream)
最常见的用法,通常用于读取控制台输入。
// 读取标准输入(键盘)
Scanner sc = new Scanner(System.in);
// 读取文件输入流
Scanner scFile = new Scanner(new FileInputStream("file.txt"));- 支持的构造函数:
Scanner(InputStream source)Scanner(InputStream source, String charsetName):指定字符集编码。
2. 文件 (File)
直接从文件对象读取内容。
File file = new File("example.txt");
Scanner sc = new Scanner(file);- 支持的构造函数:
Scanner(File source)Scanner(File source, String charsetName)
3. 字符串 (String)
直接扫描和解析一个字符串的内容,而不是将其视为文件路径。
String input = "1 fish 2 fish red fish blue fish";
Scanner sc = new Scanner(input);- 支持的构造函数:
Scanner(String source)
4. 路径 (Path) - (Java 7+)
使用 NIO 的 Path 对象来读取文件。
Scanner sc = new Scanner(Paths.get("example.txt"));- 支持的构造函数:
Scanner(Path source)Scanner(Path source, String charsetName)Scanner(Path source, Charset charset)
5. Readable 接口
任何实现了 Readable 接口的对象(如 FileReader, StringReader 等)。
Readable readable = new StringReader("test input");
Scanner sc = new Scanner(readable);- 支持的构造函数:
Scanner(Readable source)
6. ReadableByteChannel
用于从 NIO 通道读取。
- 支持的构造函数:
Scanner(ReadableByteChannel source)Scanner(ReadableByteChannel source, String charsetName)
总结
Scanner 非常灵活,不仅可以从控制台 (System.in) 读取,还可以方便地解析 文件、字符串 以及各种 输入流。在使用文件或流时,建议使用 try-with-resources 语句或手动调用 close() 方法来关闭 Scanner,以释放底层资源。