3.7 输入和输出

下面学习控制台的输入输出部分。

1 读入输入

注意:使用Scanner类之前得先导入这个类哈,

import java.util.Scanner;

1 先用System.in构造一个Scanner类对象。

 Scanner in = new Scanner(System.in);

2 然后你就可以提示用户输入,就可以读取到了,

 System.out.println("你叫什么名字?");
 String name = in.nextLine();//读取一行,用户用回车确认了嘛

3 也可以读取一个单词

System.out.println("你姓什么?");
String firstName = in.next();//检测到空格了,就算输入一个单词了,本段代码不能多输入啊,会报异常的

4 也可以读取一个整型

System.out.println("你几岁啦?");
int age = in.nextInt();

5 也可以读取浮点型

System.out.println("你有多少钱?");
double money = in.nextDouble();

6 然后你就可以显示你得到的数据了

System.out.println("你好," + name + ",你姓" + firstName + ",对不对?");
System.out.println("我知道你" + age + "岁了,还知道你有" + money + "元钱。");

注意:Scanner不适合输入密码,Java有Console类比较适合输入密码。

//注意,这段代码不能在IDE里运行成功,得自己编写用系统自带的命令行才能执行
Console cons = System.console();
String username = cons.readLine("用户名:");
char[] passwd = cons.readPassword("密码:");
System.out.println("你的用户名是:" + username 
        + ",你输入的密码是:"+ Arrays.toString(passwd));

Scanner类的一些没提到的方法

  • boolean hasNext()
    检测是否有下一个单词输入
  • boolean hasNextInt()
    检测是否有下一个整型输入
  • boolean hasNextDouble()
    检测是否有下一个浮点型输入

2 格式化输出

有一些特殊的场合,我们不满足于只是输出结果,我们想要以一定的格式来输出,那就要用到格式化输出。

格式化输出采用printf()方法。

double x= 10000.0 / 3.0;
System.out.println(x);         //3333.3333333333335
System.out.printf("%8.2f", x); // 3333.33
//上面这个输出就是格式化后的结果,显示8位,小数点后保留两位

另一个例子:

String name = "AA";
int age = 5;
System.out.printf("Hello, %s, Next year, you'll be %d", name, age + 1);

每个格式化参数都以%开始,后面接不同的转换符,比如:f代表浮点数,s代表字符串,d代表整数。
具体请看下表:

转换符类型举例
d10进制整型数字159
x16进制整型数字9f
o8进制整型数字237
f定浮点数15.9
e指数浮点数1.59e+01
g通用浮点数-
a16进制浮点数0x1.fxxdp3
s字符串Hello
c字符H
b布尔型true
h散列码42628b2
tx或Tx日期和时间以后会提到
%百分号%
n与平台有关的行分隔符——

此外,还可以用一些标识符来控制输出的形式。

标识符目的举例
+显示数字的正负号+3333.33
空格正数前加空格’ 3333.33’
0数字前面补0003333.33
-左对齐‘3333.33 ‘
(把负数用小括号括起来(3333.33)
,添加分组分隔符3,333.33
(f)总是有小数点3333.
(x或o)添加0x或0前缀0xcafe
$给定被格式化参数索引,%1$d 把第1个参数进行格式化159
<格式化前面说明的数字,%d%159 9F

时间的格式化输出

System.out.printf("%tc", new Date());//星期六 十一月 19 18:31:20 CST 2016
System.out.printf("%1$s %2$tB %2$te, %2$tY", "日期:", new Date());//日期: 十一月 19, 2016

下表显示了一些关于时间的格式化输出:

转换符类型举例
c完整日期和时间星期六 十一月 19 18:31:20 CST 2016
FISO 8601日期2016-11-19
D美国格式日期11/19/16
T24小时时间18:37:37
r12小时时间06:37:37 pm
R24小时时间,没有秒18:37
Y4位数年份,前面会补02015
y后2位年份,会补015
C前2位年份,会补020
B月份全称十一月
b 或者 h简化月份十一月(英文的会简化)
m2位数月份,会补002
d2位数日期,会补009
e2位数日期,不补09
A完整星期名星期一
a简化星期名星期一(英文的会简化)
j一年中的第几天,001到366069
H2位数小时,会补0,24小时制18
k2位数小时,不补0,24小时制18
I2位数小时,会补0,12小时值06
l2位数小时,不补0,12小时值06
M2位数分钟,补005
S2位数秒,补019
L3位数毫秒,补0047
N9位数纳秒,补0047000000
p上午或下午的标记pm
z从GMT起,RFC822数字位移-0800
Z时区PST
s从格林威治时间1970-01-01 00:00:00起的秒数1479553528
Q从格林威治时间1970-01-01 00:00:00起的毫秒数1479553546222

这里写图片描述

3 文件的输入和输出

可以用Scenner类进行文件读入:

Scanner in = new Scanner(Path.get("fileName.txt"), "UTF-8");

使用PrintWriter类进行写入:

//如果文件不存在,就会创建
//你可以使用print()、println()、printf()进行写入
PrintWriter out = new PrintWriter("fileName.txt", "UTF-8");

File文件的读出写入容易引发异常,后面会有专门一章节说异常的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值