IO打印流是Java中用于进行格式化输出的类,主要有PrintStream和PrintWriter两个子类。它们提供了一系列方法来将数据以可读的文本形式输出到指定的目标,例如控制台、文件或网络流。
以下是对IO打印流的详细介绍:
1.PrintStream类:
- 是OutputStream的子类,主要用于处理字节流。
- 默认使用平台默认字符集进行编码。
- 对输出的数据进行了自动格式化,例如可以使用printf()方法按照格式化字符串输出结果。
- 不会抛出IOException,因此在输出过程中不需要显式处理异常。
- 可以设置自动刷新的选项,使得每次调用print或println方法后都会自动刷新输出。
- 可以方便地输出到控制台(System.out)或文件。
2.PrintWriter类:
- 是Writer的子类,主要用于处理字符流。
- 总是使用Unicode字符集进行编码,而不受平台默认字符集的影响。
- 提供与PrintStream类相似的方法,例如print()、println()和printf(),以及其他格式化方法。
- 可以设置自动刷新的选项,使得每次调用print或println方法后都会自动刷新输出。
- 可以方便地输出到控制台(System.out)或文件。
这些打印流类的使用方法非常类似,通常的使用步骤如下:
- 创建打印流对象,可以是PrintStream或PrintWriter,并指定输出目标(例如文件名、文件、控制台等)。
- 使用相应的方法(如print()、println()、printf())向打印流中写入数据。
- 关闭打印流,释放资源。
- 打印流提供了比较方便的方式来格式化输出数据,可以输出不同类型的数据,并且支持格式化字符串。它们适用于日志记录、控制台输出、文件写入以及网络通信等多种场景。
这两个类的使用方法非常类似,都提供了一系列的 print() 和 println() 方法,可以根据需要输出不同类型的数据。它们的主要区别在于:
- PrintStream 会自动对输出的对象进行格式化,例如将字符串格式化为 ASCII 码,并且不会抛出 IOException 异常;而 PrintWriter 则不会进行格式化,会抛出 IOException 异常。
- PrintStream 的输出字节流默认使用平台的默认字符集(例如 Windows 中的 GBK 编码),可以通过指定编码格式来改变;而 PrintWriter 的输出字符流则总是使用 Unicode 字符集。
- PrintStream 是线程安全的,而 PrintWriter 则不是线程安全的。
示例:
1.使用 PrintStream 打印流示例:
import java.io.*;
public class PrintStreamExample {
public static void main(String[] args) {
String filename = "output.txt";
try {
// 创建 PrintStream 对象,参数可以是 File 或 OutputStream
PrintStream printStream = new PrintStream(new FileOutputStream(filename));
// 使用 print() 和 println() 输出数据
printStream.print("Hello, world! ");
printStream.println("This is a test.");
printStream.printf("PI = %.2f", Math.PI);
// 关闭 PrintStream 对象
printStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们创建了一个 PrintStream 对象,并通过 FileOutputStream 指定输出到文件中。然后,我们使用 print() 和 println() 方法输出一些数据,并使用 printf() 方法格式化输出一个浮点数。最后,我们关闭了 PrintStream 对象。
2.使用 PrintWriter 打印流示例:
import java.io.*;
public class PrintWriterExample {
public static void main(String[] args) {
String filename = "output.txt";
try {
// 创建 PrintWriter 对象,参数可以是 File 或 Writer
PrintWriter printWriter = new PrintWriter(new FileWriter(filename));
// 使用 print() 和 println() 输出数据
printWriter.print("Hello, world! ");
printWriter.println("This is a test.");
printWriter.printf("PI = %.2f", Math.PI);
// 关闭 PrintWriter 对象
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中,我们创建了一个 PrintWriter 对象,并通过 FileWriter 指定输出到文件中。然后,我们使用 print() 和 println() 方法输出一些数据,并使用 printf() 方法格式化输出一个浮点数。最后,我们关闭了 PrintWriter 对象。