Java提供的输入与输出方法,什么是Scanner,你都了解了吗?

本文详细介绍了Java中如何进行输入输出操作,包括使用Scanner类从控制台读取用户输入,通过nextLine和nextInt等方法读取不同类型的输入数据,以及Console类在处理密码等隐私信息时的优势。同时,还讲解了如何格式化输出以及如何读写文件,包括指定文件的字符编码和处理文件不存在的情况。此外,还提到了Java的printf方法用于格式化输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入与输出

读取输入

输出我们最常用的是System.out.println,它能将输出打印到“标准输出流”(即控制台)中,那么输入呢?相对System.out的,我们可以使用System.in来读取“标准输入流”,但是使用步骤相对于输出较为复杂一点。我们首先要构建一个与“标准输入流”System.in关联的Scanner对象(Scanner类定义在java.util包中)。

Scanner in = new Scanner(System.in);

像这样构造好Scanner对象之后,我们就可以使用Scanner类的各种方法进行输入操作了。

nextLine方法表示将读取一行输入:

System.out.println("What is your name?");String name = in.nextLine;

注意,nextLine不会也会将空格读入进去,比如我们就不能用它来读取几个用空格分开的单词,它只会读取一整行。因此,我们可以使用另一个方法——next来输入:

String firstName = in.next();

读取一个整数有nextInt方法,读取一个浮点数有nextDouble方法(同理不做演示):

System.out.println("How old are you?");int age = in.nextInt();

我们发散思维想一想,这种输入方式有什么缺陷呢?答案就是它的输出都是显而易见的,没有任何遮掩的,密码这样的需要隐蔽性的输入就不适合这种输入方法。那么我们还有什么办法能解决这种缺陷呢?

在Java6中提供了一个Console类来实现这个目的,想要读取密码,可以这么操作:​​​​​​​

Console cons = System.console();String username = cons.readLine("Username: ");String password= cons.readPassword("Password: ");

对比Scanner,这种方式除了输入密码,实际上没有Scanner方便,它必须每次读入一行输入,而不能读取某个单词或者数值。

ScannerAPI​​​​​​​

Scanner(InputStream in)//用给定的输入流创建一个对象String nextLine()//读取输入的下一行内容String next()//读取输入的下一个单词(以空格作为分隔符)int nextInt()double nextDouble()//读取并转换下一个整数或浮点数的字符序列boolean hasNext()//检测输入中是否还有其他单词boolean hasNextInt()boolean hasNextDouble()//检测是否还有下一个表示整数或者浮点数的字符序列

格式化输入

其实Java也沿用了C语言的格式化输入方法printf,例如:​​​​​​​

double x = 10000.0/3.0;System.out,printf("%8.2f",x);

这样的含义是:打印包括一个前导空格在内的8个字符,精度为小数点后2位

3333.33

文件的输入与输出

与上面的一样,我们首先都需要构建一个Scanner对象,构造方式如下:

Scanner in = new Scanner(Path.of("hello.txt"), StandardCharsets.UTF_8);

读取一个文件时,需要知道它的字符编码,上例是UTF-8。

如果文件名包含反斜杠,需要在每个反斜杠前再加一个反斜杠进行转义:

"C:\\user\\hello.txt"

而想要写入文件,则需要构建一个PrintWriter对象。同样的,也需要在构造器中提供文件名和字符编码:

PrintWriter out = new PrintWriter("hello.txt", StandardCharsets.UTF_8);

如果文件不存在,则创建该文件。可以像输出到System.out一样使用print,println,printf命令。

当然,如果觉得相对路径定位太麻烦,我们也可以简单粗鲁的使用绝对路径,如:

"C:\\user\\hello"

注意:如果用一个不存在的文件构建一个Scanner,或者用一个无法创建的文件名构建一个PrintWriter,会产生严重异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值