打印流
- 1. 概述
- 2. 作用
- 3. `PrintStream` 字节打印流
- 3.1 构造方法
- 3.2 常用方法
- 3.3 特有方法
- 3.4 代码示例
- 4. `PrintWriter` 字符打印流
- 4.1 构造方法
- 4.2 常用方法
- 4.3 特有方法
- 4.4 代码示例
- 5. 注意事项
1. 概述
PrintStream 和 PrintWriter 都是 Java 中用于输出数据的打印流类,它们分别位于 java.io 包中。
PrintStream
:
-
PrintStream 是字节打印流类,继承自 OutputStream 类。
-
可以通过将 System.out 转换为 PrintStream 对象来实现向控制台输出数据。
-
PrintStream 提供了一系列 print() 和 println() 方法,用于打印各种数据类型。
-
PrintStream 对象不抛出 IOException,而是使用标志位来指示是否发生了错误。
PrintWriter
:
-
PrintWriter 是字符打印流类,继承自 Writer 类。
-
PrintWriter 是 PrintStream 的功能增强版,支持输出字符数据。
-
PrintWriter 可以指定字符编码,在处理中文和特殊字符时更加灵活。
-
PrintWriter 也提供了 print() 和 println() 方法来打印数据,与 PrintStream 类似。
-
PrintWriter 对象在输出数据时可以抛出 IOException 异常。
特点:
-
特点1:打印流只操作文件目的地,不操作数据源(不能输入,只能输出,即不能读,只能写)
-
特点2:特有的写出方法可以实现,数据原样写出
例如 :打印:97文件中:97 ; 打印:true文件中:true
-
特点3:特有的写出方法,可以实现自动刷新,自动换行
打印一次数据=写出+换行+刷新
2. 作用
PrintStream 和 PrintWriter 打印流在 Java 编程中的作用主要是用于方便地输出各种类型的数据到控制台、文件或其他输出目标。
-
输出数据类型: PrintStream 和 PrintWriter 类提供了一系列的 print() 和 println() 方法,可以用于输出不同类型的数据,如字符串、整数、浮点数等,而无需手动将它们转换为字符串。
-
输出到控制台: 通过将 System.out 转换为 PrintStream 对象,可以方便地将数据输出到控制台(命令行界面)上,用于调试和展示程序执行结果。
-
输出到文件: 可以通过创建 FileOutputStream 或其他输出流对象,并将其传递给 PrintStream 或 PrintWriter 的构造函数,实现将数据输出到文件中,用于日志记录或持久化数据存储。
-
处理异常: PrintStream 和 PrintWriter 均提供了异常处理机制,例如 PrintWriter 在输出数据时可以抛出 IOException 异常,在处理输出错误时提供了更灵活的方式。
-
编码设置: PrintWriter 在输出字符数据时可以设置字符编码,使其更加灵活地处理不同编码的字符数据,尤其适用于处理中文等特殊字符。
3. PrintStream
字节打印流
3.1 构造方法
构造方法 | 说明 |
---|---|
public PrintStream(OutputStream/File/String) | 关联字节输出流/文件/文件路径 |
public PrintStream(String fileName, Charset charset) | 指定字符编码 |
public PrintStream(OutputStream out, boolean autoFlush) | 自动刷新(字节流底层没有缓冲区,开不开自动刷新都一样) |
public PrintStream(OutputStream out, boolean autoFlush, String encoding) | 指定字符编码且自动刷新 |
-
public PrintStream(OutputStream/File/String)
:这是PrintStream类的构造方法之一,用于实例化一个PrintStream对象,并关联到指定的字节输出流、文件或文件路径。当PrintStream对象被创建后,它会将输出定向到所关联的输出流、文件或文件路径中,可以通过该对象进行输出操作。 -
public PrintStream(String fileName, Charset charset)
:这个构造方法创建一个PrintStream对象,并指定使用的字符编码。通过这个构造方法,可以在输出时指定字符编码,确保输出的文本字符按照指定的编码进行转换。 -
public PrintStream(OutputStream out, boolean autoFlush)
:这个构造方法创建一个PrintStream对象,并关联到指定的字节输出流。在此构造方法中,可以选择是否需要启用自动刷新功能,对于字节流底层没有缓冲区的情况,开启或关闭自动刷新功能效果相同。 -
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
:这个构造方法除了包含了自动刷新功能之外,还允许指定字符编码。该构造方法创建一个PrintStream对象,关联到指定的字节输出流,并指定输出时使用的字符编码,同时可以选择是否启用自动刷新功能。
3.2 常用方法
成员方法 | 说明 |
---|---|
public void write(int b) | 规则跟之前一样,将指定的字节写出 |
public void write(int b)
:这是PrintStream类的一个成员方法,用于将指定的字节写出到输出流中。它接受一个整数参数b,表示要写出的字节数据。
3.3 特有方法
特有方法(数据原样写出) | 说明 |
---|---|
public void println(Xxx xx) | 打印任意数据,自动刷新,自动换行 |
public void print(Xxx xx) | 打印任意数据,不换行 |
public void printf(String format, Object… args) | 带有占位符的打印语句,不换行 |
-
public void println(Xxx xx)
: 用于将任意类型的数据打印出来,并在打印完成后自动刷新输出流,并换行。可以将各种类型的数据传入该方法,PrintStream对象会自动将其转换为字符串形式并输出到关联的输出流中,然后进行刷新操作,确保输出内容被及时写入目标设备。 -
public void print(Xxx xx)
: 用于将任意类型的数据打印出来,但不会在结尾处添加换行符,即不换行。与println方法不同的是,print方法在输出完数据后不会自动进行刷新和换行操作,适合需要连续输出内容而不需要换行的情况。 -
public void printf(String format, Object... args)
:用于以指定的格式打印文本,并且支持使用占位符。通过这个方法,可以传入一个格式化字符串和需要填充到占位符中的参数,PrintStream对象将根据格式化字符串的要求进行格式化输出,不会在结尾处添加换行符,实现更加灵活的输出。
3.4 代码示例
- 代码示例
package text.IOStream.PrintStream.PrintStream01;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.nio.charset.Charset;/*字节打印流特点1:打印流只操作文件目的地,不操作数据源(不能输入,只能输出,即不能读,只能写) 特点2:特有的写出方法可以实现,数据原样写出例如:打印:97文件中:97打印:true文件中:true 特点3:特有的写出方法,可以实现自动刷新,自动换行打印一次数据=写出+换行+刷新| 构造方法 | 说明 | | ---------------------------------------------------- | ---------------------------- | | public PrintStream(OutputStream/File/String) | 关联字节输出流/文件/文件路径 | | public PrintStream(String fileName,Charset charset) | 指定字符编码 | | public PrintStream(OutputStream out,boolean autoFlush) | 自动刷新(字节流底层没有缓冲区,开不开自动刷新都一样) | | public PrintStream(OutputStream out, boolean autoFlush, String encoding) | 指定字符编码且自动刷新 || 成员方法 | 说明 | | ------------------------ | -------------------------------- | | public void write(int b) | 规则跟之前一样,将指定的字节写出 || 特有方法(数据原样写出) | 说明 | | ------------------------------------------------ | -------------------------------- | | public void println(Xxx xx) | 打印任意数据,自动刷新,自动换行 | | public void print(Xxx xx) | 打印任意数据,不换行 | | public void printf(String format,object... args) | 带有占位符的打印语句,不换行 |*/ public class PrintStream01 {public static void main(String[] args) throws FileNotFoundException {//创建字节打印流对象PrintStream ps = new PrintStream(new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\PrintStream\\PrintStream01\\a.txt"), true, Charset.forName("UTF-8"));//输出数据ps.write(97);//输出97对应的字符ps.println(97);//输出97 写出+自动刷新+自动换行ps.print(true);//写出+自动刷新ps.printf("%s喜欢%s", "小明", "小红");//%s占位符//释放资源ps.close();} }
- 输出结果
4. PrintWriter
字符打印流
4.1 构造方法
构造方法 | 说明 |
---|---|
public PrintWriter(Writer/File/String) | 关联字节输出流/文件/文件路径 |
public PrintWriter(String fileName, Charset charset) | 指定字符编码 |
public PrintWriter(Writer w, boolean autoFlush) | 自动刷新(字符流底层有缓冲区,想要自动刷新就必须打开) |
public PrintWriter(OutputStream out, boolean autoFlush, Charset charset) | 指定字符编码且自动刷新 |
-
public PrintWriter(Writer/File/String)
:通过传入Writer对象、File对象或表示文件路径的String参数,可以创建一个PrintWriter对象并将其与指定的字符输出流或文件关联起来,用于向文件或字符输出流中写入数据。 -
public PrintWriter(String fileName, Charset charset)
:该构造方法会创建一个PrintWriter对象,关联指定文件名的文件,并指定字符编码为指定的Charset。通过这个构造方法可以在创建PrintWriter对象的同时设置输出文件名和字符编码。 -
public PrintWriter(Writer w, boolean autoFlush)
:用于创建PrintWriter对象,并可选择是否打开自动刷新功能。如果设置为自动刷新,当每次调用print、println或format等方法输出内容时,PrintWriter会自动将数据刷新到底层设备。 -
public PrintWriter(OutputStream out, boolean autoFlush, Charset charset)
:用于创建PrintWriter对象,关联指定的字节输出流,并可以指定字符编码以及是否开启自动刷新。通过这个构造方法可以同时设置字符编码和自动刷新功能。
4.2 常用方法
成员方法 | 说明 |
---|---|
public void write(int b) | 规则跟之前一样,将指定的字节写出 |
public void write(int b)
: 用于将指定的单个字节写入PrintWriter。它接受一个整数参数b,表示要写入的字节值。该方法会将b的低8位作为一个字节写入输出流中。这种方法适用于需要按字节方式写入数据的场景,比如写入二进制数据或特定编码的字节流。
4.3 特有方法
特有方法(数据原样写出) | 说明 |
---|---|
public void println(Xxx xx) | 打印任意数据,自动刷新,自动换行 |
public void print(Xxx xx) | 打印任意数据,不换行 |
public void printf(String format, Object… args) | 带有占位符的打印语句,不换行 |
-
public void println(Xxx xx)
: 用于打印任意数据,并在打印完成后自动刷新输出流,并换行。其中的 Xxx 表示可以是任意类型的数据,比如字符串、整数等。调用该方法将会将指定数据打印到输出流中,然后刷新输出流并换行。 -
public void print(Xxx xx)
: 用于打印任意数据,但在打印完成后不会换行,即在同一行输出多个数据。也是 Xxx 表示可以是任意类型的数据。调用该方法将会将指定数据打印到输出流中,但不会自动换行。 -
public void printf(String format, Object... args)
: 用于带有占位符的打印语句,允许使用类似于C语言的printf格式化输出。其中的 format 参数是包含占位符的格式化字符串,args 是要填充到占位符的参数。调用该方法将会按照指定的格式将参数填充到占位符中并打印输出,但不会自动换行。
4.4 代码示例
- 代码示例
package text.IOStream.PrintStream.PrintStream02;import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;/*字符打印流特点1:打印流只操作文件目的地,不操作数据源(不能输入,只能输出,即不能读,只能写) 特点2:特有的写出方法可以实现,数据原样写出例如:打印:97文件中:97打印:true文件中:true 特点3:特有的写出方法,可以实现自动刷新,自动换行打印一次数据=写出+换行+刷新| 构造方法 | 说明 | | ---------------------------------------------------- | ---------------------------- | | public PrintWriter(Writer/File/String) | 关联字节输出流/文件/文件路径 | | public PrintWriter(String fileName,Charset charset) | 指定字符编码 | | public PrintWriter(Writer w,boolean autoFlush) | 自动刷新(字符流底层有缓冲区,想要自动刷新就必须打开) | | public PrintWriter(OutputStream out, boolean autoFlush,Charset charset ) | 指定字符编码且自动刷新| 成员方法 | 说明 | | ------------------------ | -------------------------------- | | public void write(int b) | 规则跟之前一样,将指定的字节写出 || 特有方法(数据原样写出) | 说明 | | ------------------------------------------------ | -------------------------------- | | public void println(Xxx xx) | 打印任意数据,自动刷新,自动换行 | | public void print(Xxx xx) | 打印任意数据,不换行 | | public void printf(String format,object... args) | 带有占位符的打印语句,不换行 |*/ public class PrintStream02 {public static void main(String[] args) throws IOException {//创建对象PrintWriter pw = new PrintWriter(new FileWriter("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\PrintStream\\PrintStream02\\a.txt"), true);//输出数据pw.println("今天天气不错!");pw.print("确实可以!");pw.printf("%s想要和%s出去游泳!", "小明", "小红");//释放资源pw.close();} }
- 输出结果
5. 注意事项
-
字符编码:PrintStream和PrintWriter都可以指定字符编码来进行字符输出,默认情况下使用平台默认的字符编码。在处理含有非ASCII字符的文本时,特别是在跨平台应用中,应该明确指定字符编码,以避免出现乱码问题。
-
刷新与关闭:在写入数据到PrintStream和PrintWriter之后,可以调用flush()方法来刷新输出流,确保缓冲区中的数据被全部写出。另外,在程序结束前应当调用close()方法关闭流,以确保资源得到释放并数据得到完整输出。
-
自动刷新:PrintWriter具有自动刷新功能,即在使用println()方法输出数据时,会自动刷新输出流,而PrintStream则没有这种自动刷新的功能。所以,在使用PrintStream时需要注意手动调用flush()方法来刷新输出流。
-
异常处理:在使用PrintStream和PrintWriter进行输出操作时,应当适时处理可能抛出的IO异常,比如IOException。建议使用try-with-resources语句或者在finally块中关闭流并处理异常,以确保程序稳定性。
-
区分用途:PrintStream主要用于输出字节数据,而PrintWriter主要用于输出字符数据。根据需要选择适合的打印流,以确保正确地处理数据输出。