Java IO打印流 & 标准输入输出流(System.in、Scanner类、System.out、printf方法)

打印流

平时在控制台的打印输出是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。继承于java.io.OutputStream

PrintStream类

构造方法

  • public PrintStream(String fileName):使用指定的文件名创建一个新的打印流。(输出的目的地是一个文件路径)
  • public PrintStream(File file):创建具有指定文件且不带自动行刷新的新打印流。(输出的目的地是一个文件)
  • public PrintStream(OutputStream out):创建新的打印流。(输出的目的地是一个字节输出流)
PrintStream ps = new PrintStream("ps.txt")

改变打印流向

System.out就是PrintStream类型的,只不过它的流向是系统规定的,打印在控制台上。因为是流对象,可以通过System.setOut(PrintStream ps)方法改变它的流向。

  • System.setOut(PrintStream ps):改变改变打印流的流向,将输出的数据打印到指定的位置。
public static void main(String[] args) throws IOException {
    // 调用系统的打印流,控制台直接输出97
    System.out.println(97);
    // 创建打印流,指定文件的名称
    PrintStream ps = new PrintStream("ps.txt");
    // 设置系统的打印流流向,输出到ps.txt
    System.setOut(ps);
    // 调用系统的打印流,ps.txt中输出97
    System.out.println(97);
}

还原打印流向

还原打印流向可以先创建一个PrintStream对象保存原有的System.Out,还原时使用该对象还原。

public static void main(String[] args) throws FileNotFoundException {
    //先创建一个PrintStream对象保存原有的流向
    PrintStream out = System.out;
    //此时打印输出语句还在系统中
    System.out.println("第一句话!");
    //创建有地址的PrintStream对象
    PrintStream ps = new PrintStream("E:\\123.txt");
    //将流向设置为文件
    System.setOut(ps);
    //此时打印的输出语句流向至文件中
    System.out.println("第二句话!");
    //还原流向
    System.setOut(out);
    //此时的输出语句打印在系统中,已经还原
    System.out.println("第三句话!");
}

如果使用继承自父类的write方法写数据,在查看数据的时候会查询编码表(97→a)。
如果使用自己特有方法print/println方法写数据,将原样输出(97→97)。

PrintWriter类

构造方法

  • public PrintWriter(String fileName):使用指定的文件名创建一个新的打印流。(输出的目的地是一个文件路径)
  • public PrintWriter(File file):创建具有指定文件且不带自动行刷新的新打印流。(输出的目的地是一个文件)
  • public PrintWriter(OutputStream out):创建新的打印流。(输出的目的地是一个字符输出流)
PrintWriter ps = new PrintWriter(new FileWriter("E:\\ps.txt"));

标准输入输出流

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。

标准输入流

System.in表示的是标准输入流,从键盘输入。

在Java中,要想通过控制台进行输入,首先需要构造一个Scanner对象,并与标准输入流 System.in关联。

  • System.in的编译类型是InputStream
  • System.in的运行类型是BufferedInputStream

Scanner类常用方法:

  • Scanner (InputStream in):用给定的输入流创建一个 Scanner 对象。
  • String nextLine():读取输入的下一行内容。
  • String next():读取输入的下一个单词(以空格作为分隔符。)
  • int nextlnt():读取并转换下一个表示整数的字符序列。
  • double nextDouble():读取并转换下一个表示浮点数的字符序列。
  • boolean hasNext():检测输入中是否还有其他单词。
  • boolean hasNextInt():检测是否还有表示整数的下一个字符序列。
  • boolean hasNextDouble():检测是否还有表示浮点数的下一个字符序列。
// 创建Scanner构造函数,并传入参数
Scanner in = new Scanner(System.in);
// nextLine 方法将输入一行,这一行中可以包含空格
System.out.print("What is your name? ");
String name = in.nextLine();
// 读取一个单词(以空白符作为分隔符)
String firstName = in.next()// 要想读取一个整数
System.out.print("How old are you? ")int age = in.nextlnt();

标准输出流

System.out表示的是标准输出流,将数据输出到显示器。

在Java中,可以使用System.out.print(x)将数值 x 输出到控制台上。如果希望显示美元、美分等符号, 则有可能会出现问题。

  • System.out的编译类型是OutputStream
  • System.out的运行类型是BufferedOutputStream

Java SE 5.0 沿用了C语言库函数中的printf方法。例如,调用 System.out.printf("%8.2f", x); 可以用 8 个字符的宽度和小数点后两个字符的精度打印 x。比如,10000.0 / 3.0,则打印3333.33

printf中,可以使用多个参数, 例如:System.out.printf("Hello, %s. Next year, you'll be %d", name, age); 每一个以 % 字符开始的格式说明符都用相应的参数替换。

还可以给出控制格式化输出的各种标志。例如,逗号标志增加了分组的分隔符。Systen.out.printf("%,.2f", 10000.0 / 3.0);打印3,333.33

转换符类型
d十进制整数
x十六进制整数
o八进制整数
f定点浮点数
e指数浮点数
g通用浮点数
a十六进制浮点数
s字符串
c字符
b布尔
h散列码
tx 或 Tx日期时间(T强制大写)已经过时,应当改为使用java.time 类
%百分号
n与平台有关的行分隔符

还可以给出控制格式化输出的各种标志。表 3-6 列出了所有的标志。例如,逗号标志增加了分组的分隔符。 即

Systen.out.printf("%,.2f", 10000.0 / 3.0); // 打印 3,333.33
标志描述
+打印正数和负数的符号
空格在正数之前添加空格
0数字前面补 0
-左对齐
(将负数括在括号内
,添加分组分隔符
# (对于 f 格式)包含小数点
# (对于 0x 或 0 格式)添加前缀 0x 或 0
$给定被格式化的参数索引。例如 %1$d%1$x 将以十进制和十六进制格式打印第 1 个参数
<格式化前面说明的数值。 例如%d%<x 以十进制和十六进制打印同一个数值

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

String message = String.format("Hello, %s. Next year, you'll be %d", name , age);

在这里插入图片描述

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VincentHu_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值