5 输入输出

Wu Jun 2020-02-25 16:53:57
05 Java > 00 Java 基础 > 01 基本设计

1 读取输入

1.1 Scanner 类

1)文件输入
// 如果是 win 系统,使用双反斜杠,"c:\\mydirectory\\myfile.txt" ,每个 \ 需要额外的一个 \。
Scanner scan = new Scanner(Paths.get("myfile.txt"),"UTF-8");
2)标准输入
Scanner in = new Scanner(System.in);

1.2 Console 类

因为输入是可见的,所以 Scanner 类不适用于控制台读取密码,可以使用 Console 类,但每次只能读取一行,而且在 IDE 上无法使用:

Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");

2 格式化输出

2.1 printf 方法

一种方法是 Java 沿用了 C 语言的 printf 方法

//输出3,333.33
System.out.printf("%,.2f", 10000 / 3.0);

2.2 String.format

另一种方法可以用 String.format 方法创建一个不输出的格式化字符串。

String name = "boy";
int age = 10;
String message = String.format("Hello,%s.Next year,you'll be %d \n", name, age);
System.out.printf(message);
// 输出 Hello,boy.Next year,you'll be 1

2.3 文件输出

写入文件需要构造一个 PrintWriter 对象,此 PrintWriter 类与 System.out(是 PrintStream 类对象)在 print、println、printf 上用法相同。

//在构造器中只需要提供文件名,没有的话会新建,如果之前已存在会覆盖
PrintWriter out = new PrintWriter("myfile.txt","UTF-8");

用相对路径时,文件位于 java 虚拟机启动路径的相对位置。可以调用 System.getProperty(“user.dir”) 找到。

2.4 printf 格式化符号

1)类型字符
符号 含义
%a 浮点数、十六进制数字和p-记数法(c99
%A 浮点数、十六进制数字和p-记法(c99)
%c 一个字符(char)
%C 一个ISO宽字符
%d 有符号十进制整数(int)
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 单精度浮点数(默认float)、十进制记数法(%.nf 这里n表示精确到小数位后n位.十进制计数)
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 对应字符串char*(%s = %hs = %hS 输出 窄字符)
%S 对应宽字符串WCAHR*(%ws = %S 输出宽字符串)
%u 无符号十进制整数(unsigned int)
%x 使用十六进制数字0xf的无符号十六进制整数
%X 使用十六进制数字0xf的无符号十六进制整数
%% 打印一个百分号
%I64d 用于INT64 或者 long long
%I64u 用于UINT64 或者 unsigned long long
%I64x 用于64位16进制数据
2)格式字符

格式字符用以指定输出项的数据类型和输出格式。