Java IO 5-打印流
程序员文章站
2024-03-04 21:01:54
...
使用过 OutputStream 输出流的一定会有一种莫名的难受,因为每次给文件中输出内容都得先进行一次额外加工,输出二进制文件还好说,字节输出流直接走,但是IO操作总不能只和二进制文件打交道吧,想输出一个字符串,还得 getBytes() 一下,真是太麻烦了。
但其实,JDK为了解决 OutputStream 这一缺陷,提出了打印流这个概念,即像打印一样将内容打印到文件里。
1. 自定义打印流
首先,我们自己设计一个自己称手的打印流,毕竟自己动手,丰衣足食嘛。
// 自定义打印流工具类
class PrintUtil {
private OutputStream out;
public PrintUtil(OutputStream out) {
this.out = out;
}
// 核心打印功能,其实就是将字节输出流进行了封装
public void print(String str) {
try {
this.out.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
// 重载各种数据类型的print()和println()方法
public void println(String str) {
this.print(str+"\n");
}
public void print(int num) {
this.print(String.valueOf(num));
}
public void println(int num) {
this.print(String.valueOf(num)+"\n");
}
// 还有各种类型的重载,这里就不进行赘述了
public class Test {
public static void main(String[] args) throws Exception {
// 使用自己定义的打印流
File file = new File("E:\\IO\\demo.txt");
PrintUtil print = new PrintUtil(new FileOutputStream(file));
print.print("姓名: ");
print.println("张三");
print.print("年龄: ");
print.println(10);
}
}
测试一下,运行前测试文件夹:
运行后:
打印流
接下来,我们看看JDK提供的打印流。
// 字符打印流,我们用这个比较多
public class PrintWriter extends Writer
// 字节打印流
public class PrintStream extends FilterOutputStream
implements Appendable, Closeable
测试一下JDK的打印流:
public class Test {
public static void main(String[] args) throws Exception {
PrintWriter print = new PrintWriter(new FileOutputStream(new File("E:\\IO\\demo.txt")));
print.print("姓名: ");
print.println("李四");
print.print("年龄: ");
print.println(12);
// 打印流需要关闭
print.close();
}
}
运行结果:
Java为了吸引C/C++程序员的加入,在PrintWrite类中还提供了一个带有格式化输出的方法。
// 格式化输出,格式嘛与C/C++的printf函数如出一辙
public PrintWriter printf(String format, Object ... args)
看下面的例子:
public class Test {
public static void main(String[] args) throws Exception {
PrintWriter print = new PrintWriter(new FileOutputStream(new File("E:\\IO\\demo.txt")));
String name = "xucc";
int age = 10;
double annualSalary = 300000.12345;
print.printf("姓名:%s, 年龄:%d, 年薪:%1.2f", name, age, annualSalary);
// 打印流需要关闭
print.close();
}
}
运行结果:
其实这样的效果 String 类也能做到,使用下面的方法实现格式化:
public static String format(String format, Object... args)
使用如下:
String name = "xucc";
int age = 10;
double annualSalary = 300000.12345;
String str = String.format("姓名:%s, 年龄:%d, 年薪:%1.2f", name, age, annualSalary);
System.out.println(str);
显示结果: