Java中的打印流PrintStream和PrintWriter

591 阅读4分钟

打印流

Java中的打印流(PrintStream和PrintWriter)是用于方便地输出数据到控制台或文件的工具类。它们提供了一系列的方法来格式化和打印各种数据类型。

PrintStream

PrintStream是Java中用于打印输出的字节流类。它是OutputStream的子类,提供了一系列用于打印数据的方法,方便输出到控制台或文件。

PrintStream类的常用构造方法有以下几种:

  1. PrintStream(OutputStream out): 创建一个PrintStream对象,指定输出目标为指定的字节输出流。
  2. PrintStream(OutputStream out, boolean autoFlush): 创建一个PrintStream对象,指定输出目标为指定的字节输出流,并设置是否在写入操作后自动刷新输出缓冲区。
  3. PrintStream(File file): 创建一个PrintStream对象,指定输出目标为指定的文件。
  4. PrintStream(String fileName): 创建一个PrintStream对象,指定输出目标为指定文件名对应的文件。

PrintStream类常用方法的代码示例

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStreamExample {
    public static void main(String[] args) {
        try {
            // 创建PrintStream对象,并指定输出目标为文件
            PrintStream ps = new PrintStream(new FileOutputStream("output.txt"));

            // 打印字符串
            ps.print("Hello, ");
            ps.println("World!");

            // 打印整数
            ps.printf("The answer is %d\n", 42);

            // 打印浮点数
            ps.printf("The value of Pi is %.2f\n", Math.PI);

            // 关闭PrintStream
            ps.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,首先创建了一个PrintStream对象,将其输出目标设置为一个文件。然后使用PrintStream的print、println和printf方法进行打印输出。最后关闭PrintStream对象。

执行上述代码后,将会在当前目录下生成一个名为"output.txt"的文件,内容如下:

Hello, World!
The answer is 42
The value of Pi is 3.14

通过PrintStream类的方法,我们可以方便地打印不同类型的数据,并且支持格式化输出。

PrintWriter

PrintWriter是Java中用于打印输出的字符流类。它是Writer的子类,提供了一系列用于打印数据的方法,方便输出到控制台或文件。

PrintWriter类的常用构造方法有以下几种:

  1. PrintWriter(Writer out): 创建一个PrintWriter对象,指定输出目标为指定的字符输出流。
  2. PrintWriter(Writer out, boolean autoFlush): 创建一个PrintWriter对象,指定输出目标为指定的字符输出流,并设置是否在写入操作后自动刷新输出缓冲区。
  3. PrintWriter(File file): 创建一个PrintWriter对象,指定输出目标为指定的文件。
  4. PrintWriter(String fileName): 创建一个PrintWriter对象,指定输出目标为指定文件名对应的文件。

PrintWriter类常用方法的代码实现

import java.io.*;

public class PrintWriterDemo {
    public static void main(String[] args) throws FileNotFoundException {
        PrintWriter printWriter = new PrintWriter(System.out);

        // 使用print()方法打印数据
        printWriter.print("Hello ");
        printWriter.print(123);
        printWriter.print(" World");

        // 使用println()方法打印数据并换行
        printWriter.println();
        printWriter.println("This is a new line");

        // 使用printf()方法格式化打印数据
        printWriter.printf("Value: %d, Name: %s", 100, "John");

        printWriter.close();
    }
}

上述代码演示了PrintWriter类的常用方法,包括print()方法用于打印数据,println()方法用于打印数据并换行,以及printf()方法用于格式化打印数据。请注意,代码中使用的PrintWriter对象是针对标准输出流(System.out)的,你也可以将其替换为其他输出流,如文件输出流(FileOutputStream)。

执行以上代码将会在控制台输出以下内容:

Hello 123 World
This is a new line
Value: 100, Name: John

PrintStream和PrintWriter的区别

  1. 输出目标:

    • PrintStream:主要用于输出到字节流,通常用于输出到控制台或文件。它继承自OutputStream类,可以将输出的数据转换成字节流进行输出。
    • PrintWriter:主要用于输出到字符流,通常用于输出到控制台或文件。它继承自Writer类,可以将输出的数据转换成字符流进行输出。
  2. 字符编码:

    • PrintStream:使用平台默认的字符编码进行输出,默认情况下是使用系统的默认字符编码(如UTF-8或GBK)。
    • PrintWriter:可以指定字符编码进行输出,可以通过构造方法或调用其相关方法进行设置。
  3. 自动刷新:

    • PrintStream:默认情况下,不会自动刷新输出缓冲区,需要手动调用flush方法或者关闭流才会刷新输出。可以通过设置autoFlush参数为true来开启自动刷新。
    • PrintWriter:默认情况下,不会自动刷新输出缓冲区,需要手动调用flush方法或者关闭流才会刷新输出。可以通过构造方法设置autoFlush参数为true来开启自动刷新。
  4. 异常处理:

    • PrintStream:在输出过程中,如果发生错误,会抛出IOException。
    • PrintWriter:在输出过程中,如果发生错误,会抛出IOException。
  5. 打印方法:

    • PrintStream:提供了print和println系列方法,可以打印各种类型的数据,包括基本数据类型和对象。
    • PrintWriter:也提供了print和println系列方法,可以打印各种类型的数据,包括基本数据类型和对象。