读取输入
只要调用System.out.println就可以实现打印输出到“标准输出流”(即控制台窗口)。然而,读取“ 标准输入流” System.in 就没有那么简单了。要想通过控制台进行输入,首先需要构造一个 Scanner 对象,并与“ 标准输入流” System.in 关联。
Scanner in = new Scanner(System.in);
现在就可以使用Scanner类的各种方法实现输入操作。
方法 | 实现功能 |
---|---|
Scanner (InputStream in) | 用给定的输入流创建一个 Scanner 对象 |
String nextLine( ) | 读取输入的下一行内容 |
String next( ) | 读取输入的下一个单词(以空格作为分隔符) |
int nextlnt( ) | 读取并转换下一个表示整数的字符序列 |
double nextDouble( ) | 读取并转换下一个表示浮点数的字符序列 |
boolean hasNext( ) | 检测输入中是否还有其他单词 |
boolean hasNextInt( ) | 检测是否还有表示整数的下一个字符序列 |
boolean hasNextDouble( ) | 检测是否还有表示浮点数的下一个字符序列 |
Scanner 类定义在java.util 包中。因此使用Scanner类需要在程序的最开始添加上一行:
import java.util.*;
当使用的类不是定义在基本java.lang 包中时,一定要使用import 指示字将相应的包加载进来。
格式化输出
在早期的 Java 版本中,格式化数值曾引起过一些争议。庆幸的是,Java SE 5.0 沿用了 C语言库函数中的 printf方法。在 printf中,可以使用多个参数, 例如:
System.out.printf("Hello,%s.Next year, you'll be %d", name, age);
每一个以 % 字符开始的格式说明符都用相应的参数替换。 格式说明符尾部的转换符将指示被格式化的数值类型。下表列出了printf所有转换符。
转换符 | 类型 | 举例 |
---|---|---|
d | 十进制整数 | 159 |
s | 字符串 | Hello |
x | 十六进制整数 | 9f |
c | 字符 | H |
o | 八进制整数 | 237 |
b | 布尔 | True |
f | 定点浮点数 | 15.9 |
h | 散列码 | 42628b2 |
e | 指数浮点数 | 1.59e+01 |
g | 通用浮点数 | 一 |
% | 百分号 | % |
a | 十六进制浮点数 | 0xl.fccdp3 |
n | 与平台有关的行分隔符 | 一 |
另外,还可以给出控制格式化输出的各种标志。下表列出了printf所有的标志。
标志 | 目的 | 举例 |
---|---|---|
+ | 打印正数和负数的符号 | +3333.33 |
空格 | 在正数之前添加空格 | — |
0 | 数字前面补 0 | 003333.33 |
- | 左对齐 | — |
( | 将负数括在括号内 | ( 3333.33 ) |
, | 添加分组分隔符 | 3,333.33 |
# ( 对于 f 格式) | 包含小数点 | 3,333. |
# (对于 x 或 0 格式) | 添加前缀 0x 或 0 | 0xcafe |
$ | 给定被格式化的参数索引 | 159 9F |
< | 格式化前面说明的数值 | 159 9F |
文件输入与输出
要想对文件进行读取,就需要一个用 File 对象构造一个 Scanner 对象,如下所示:
Scanner in = new Scanner(Paths.get("niyflle.txt"), "UTF-8");
如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠: “ c:\mydirectory\myfile.txt ” 。
现在,就可以利用前面介绍的任何一个 Scanner 方法对文件进行读取。要想写入文件, 就需要构造一个 PrintWriter 对象。在构造器中,只需要提供文件名:
PrintWriter out = new PrintWriterC('myfile.txt", "UTF-8");
如果文件不存在,创建该文件。 可以像输出到 System.out—样使用 print、 println 以及 printf命令。