4.输入输出【Java温故系列】

参考自–《Java核心技术卷1》

输入输出

1 读取输入

打印输出“标准输出流” System.out到控制台窗口是十分容易的,只需要调用 System.out.println 即可。然而,读取“标准输出流” System.in 却没那么简单。

要想通过控制台进行输入,首先要构建一个 Scanner 对象,并与“标准输入流” System.in 关联:

Scanner in = new Scanner(System.in);

然后就可以使用 Scanner 类的各种方法实现输入操作:

如:使用 nextLine 方法读取一行输入(包括空格):

String s = in.nextLine();

如:使用 next 方法读取一个单词(以空白符作为分隔符):

String s = in.next();

如:使用 nextInt 读取一个整数:

int n = in.nextInt();

与此类似,要想读取下一个浮点数,就调用 nextDouble 方法。

:Scanner 类定义在 java.util 包里,使用 Scanner 类读取 标准输入流 前需加载该包:

import java.util.Scanner;

其他方法

  • boolean hasNext() 检测输入中是否还有其他单词
  • boolean hasNextInt() 检测是否还有表示整数的下一个字符序列
  • boolean hasNextDouble() 检测是否还有表示浮点数的下一个字符序列

2 格式化输出

可以使用 System.out.print(x) 将数值 x 输出到控制台。这条命令将以 x 对应的数据类型所允许的最大非0数字位数打印输出 x。例如:

double x = 10000.0/3.0;
System.out.print(x);   //输出 3333.3333333333335

格式化输出沿用了 C 语言库函数中的 printf 方法:

System.out.printf("%8.2f",x);   //输出  3333.33(注前面带有一个空格)

即用8个字符的宽度和小数点后两个字符的精度打印 x(即一个空格加7个字符)。

printf 中。可以使用多个参数:

System.out.printf("My name id %s,and I am %d years old",name,age);

每一个以 % 字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WbEzGoP-1588232517672)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20200403165254619.png)]

此外,还可以给出控制格式化输出的各种标志:

//使用分组的分隔符(分隔符可更换为其他符号)
System.out.printf("%,.2f",10000.0/3.0);  //输出结果 3,333.33
//打印正数和负数的符号
System.out.printf("%+.2f",10000.0/3.0);   //输出结果 +3333.33

其他标志: 0 在数字前面补0;- 左对齐;( 将数字括起来 等等。

:可以使用静态方法 String.format 创建一个格式化的字符串,而不打印输出:

String msg = String.format("My name id %s,and I am %d years old",name,age);

:日期和时间的格式化:

System.out.printf("%tc",new Date());  //打印当前日期和时间 
//星期五 四月 03 17:01:16 CST 2020
// %tT  24小时时间(%tr 不带秒)
// %tr  12小时时间
// %tF  ISO 8601时间  年-月-日
// 等等

3 文件输入和输出

想要对文件进行读取,就需要一个用 File 对象构造的 Scanner 对象,如下:

Scanner in = new Scanner(Paths.get("url"),"UTF-8");  // url为读取的文件路径  UTF-8为编码格式

然后就可以使用 Scanner 的各种方法对文件进行读取了。如:

// 一行一行读取并打印,直至读取完全部内容
while (in.hasNext()){
    String str = in.nextLine();
    System.out.println(str);
}

想要写入文件,就需要构造一个 PrintWrite 对象。在构造器中,只需要提供文件名:

PrintWriter out = new PrintWrite("url","UTF-8");  //url为写入文件的路径
// 此处的 “url” 也可以是一个 File 对象

如果对应的文件不存在,则创建该文件。

写入(可以使用 print 、println 、printf 命令):

out.println("c123");  
out.println(12);
out.close();  //最后需要关闭写入

:如果用一个不存在的文件构造一个 Scanner 或者用一个不能被创建的文件名构造一个 PrintWrite,那么就会发生异常。Java编译器认为这些异常比“被零除”异常更严重。需要做抛出异常throw 或者 try catch 语句处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值