Module java.base
Package java.io

Class PrintWriter

java.lang.Object
java.io.Writer
java.io.PrintWriter
所有已实现的接口:
Closeable, Flushable, Appendable, AutoCloseable

public class PrintWriter extends Writer
将对象的格式化表示打印到文本输出流。此类实现了PrintStream中找到的所有print方法。它不包含用于写入原始字节的方法,程序应使用未编码的字节流。

PrintStream类不同,如果启用了自动刷新,则只有在调用printlnprintfformat方法之一时才会执行刷新,而不是在输出换行符时执行。这些方法使用平台自己的行分隔符的概念,而不是换行符。

此类中的方法永远不会抛出I/O异常,尽管它的一些构造函数可能会。客户端可以通过调用checkError()来查询是否发生了任何错误。

此类始终使用字符集的默认替换字符串替换格式不正确和不可映射的字符序列。当需要对编码过程进行更多控制时,应使用CharsetEncoder类。

自 JDK 版本:
1.1
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Writer
    out
    PrintWriter的基础字符输出流。

    Fields declared in class java.io.Writer

    lock
  • Constructor Summary

    Constructors
    Constructor
    Description
    PrintWriter(File file)
    使用指定文件创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(File file, String csn)
    使用指定文件和字符集创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(File file, Charset charset)
    使用指定文件和字符集创建一个新的PrintWriter,不自动刷新行。
    从现有的OutputStream创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(OutputStream out, boolean autoFlush)
    从现有的OutputStream创建一个新的PrintWriter。
    PrintWriter(OutputStream out, boolean autoFlush, Charset charset)
    从现有的OutputStream创建一个新的PrintWriter。
    创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(Writer out, boolean autoFlush)
    创建一个新的PrintWriter。
    PrintWriter(String fileName)
    使用指定文件名创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(String fileName, String csn)
    使用指定文件名和字符集创建一个新的PrintWriter,不自动刷新行。
    PrintWriter(String fileName, Charset charset)
    使用指定文件名和字符集创建一个新的PrintWriter,不自动刷新行。
  • Method Summary

    Modifier and Type
    Method
    Description
    append(char c)
    将指定字符追加到此写入器。
    将指定字符序列追加到此写入器。
    append(CharSequence csq, int start, int end)
    将指定字符序列的子序列追加到此写入器。
    boolean
    如果流未关闭,则刷新流并检查其错误状态。
    protected void
    清除此流的错误状态。
    void
    close()
    关闭流并释放与其关联的任何系统资源。
    void
    flush()
    刷新流。
    format(String format, Object... args)
    使用指定格式字符串和参数向此写入器写入格式化字符串。
    format(Locale l, String format, Object... args)
    使用指定格式字符串和参数向此写入器写入格式化字符串。
    void
    print(boolean b)
    打印布尔值。
    void
    print(char c)
    打印字符。
    void
    print(char[] s)
    打印字符数组。
    void
    print(double d)
    打印双精度浮点数。
    void
    print(float f)
    打印浮点数。
    void
    print(int i)
    打印整数。
    void
    print(long l)
    打印长整数。
    void
    print(Object obj)
    打印对象。
    void
    打印字符串。
    printf(String format, Object... args)
    使用指定格式字符串和参数向此写入器写入格式化字符串的便利方法。
    printf(Locale l, String format, Object... args)
    使用指定格式字符串和参数向此写入器写入格式化字符串的便利方法。
    void
    通过写入行分隔符字符串终止当前行。
    void
    println(boolean x)
    打印布尔值,然后终止行。
    void
    println(char x)
    打印字符,然后终止行。
    void
    println(char[] x)
    打印字符数组,然后终止行。
    void
    println(double x)
    打印双精度浮点数,然后终止行。
    void
    println(float x)
    打印浮点数,然后终止行。
    void
    println(int x)
    打印整数,然后终止行。
    void
    println(long x)
    打印长整数,然后终止行。
    void
    打印对象,然后终止行。
    void
    打印字符串,然后终止行。
    protected void
    将流的错误状态设置为true
    void
    write(char[] buf)
    写入字符数组。
    void
    write(char[] buf, int off, int len)
    写入字符数组的一部分。
    void
    write(int c)
    写入单个字符。
    void
    写入字符串。
    void
    write(String s, int off, int len)
    写入字符串的一部分。

    Methods declared in class java.io.Writer

    nullWriter

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • out

      protected Writer out
      PrintWriter的基础字符输出流。
      自 JDK 版本:
      1.2
  • Constructor Details

    • PrintWriter

      public PrintWriter(Writer out)
      创建一个新的PrintWriter,不自动刷新行。
      参数:
      out - 字符输出流
    • PrintWriter

      public PrintWriter(Writer out, boolean autoFlush)
      创建一个新的PrintWriter。
      参数:
      out - 字符输出流
      autoFlush - 一个布尔值;如果为true,则printlnprintfformat方法将刷新输出缓冲区
    • PrintWriter

      public PrintWriter(OutputStream out)
      从现有的OutputStream创建一个新的PrintWriter,不自动刷新行。此便利构造函数将创建必要的中间OutputStreamWriter,它将使用默认字符集将字符转换为字节,或者如果outPrintStream,则使用打印流使用的字符集。
      参数:
      out - 输出流
      参见:
    • PrintWriter

      public PrintWriter(OutputStream out, boolean autoFlush)
      从现有的OutputStream创建一个新的PrintWriter。此便利构造函数将创建必要的中间OutputStreamWriter,它将使用默认字符集将字符转换为字节,或者如果outPrintStream,则使用打印流使用的字符集。
      参数:
      out - 输出流
      autoFlush - 一个布尔值;如果为true,则printlnprintfformat方法将刷新输出缓冲区
      参见:
    • PrintWriter

      public PrintWriter(OutputStream out, boolean autoFlush, Charset charset)
      从现有的OutputStream创建一个新的PrintWriter。此便利构造函数将创建必要的中间OutputStreamWriter,它将使用指定的字符集将字符转换为字节。
      参数:
      out - 输出流
      autoFlush - 一个布尔值;如果为true,则printlnprintfformat方法将刷新输出缓冲区
      charset - 一个字符集
      自 JDK 版本:
      10
    • PrintWriter

      public PrintWriter(String fileName) throws FileNotFoundException
      使用指定文件名创建一个新的PrintWriter,不自动刷新行。此便利构造函数将创建必要的中间OutputStreamWriter,它将使用此 Java 虚拟机实例的默认字符集对字符进行编码。
      参数:
      fileName - 用作此写入器目的地的文件的名称。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      抛出:
      FileNotFoundException - 如果给定的字符串不表示现有的可写入的常规文件,且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误时
      SecurityException - 如果存在安全管理器并且checkWrite(fileName)拒绝对文件的写访问
      自 JDK 版本:
      1.5
      参见:
    • PrintWriter

      public PrintWriter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException
      使用指定文件名和字符集创建一个新的PrintWriter,不自动刷新行。此便利构造函数将创建必要的中间OutputStreamWriter,它将使用提供的字符集对字符进行编码。
      参数:
      fileName - 要用作此写入器目的地的文件的名称。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      csn - 支持的字符集的名称 charset
      抛出:
      FileNotFoundException - 如果给定的字符串不表示现有的可写常规文件,且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误
      SecurityException - 如果存在安全管理器并且 checkWrite(fileName) 拒绝对文件的写访问
      UnsupportedEncodingException - 如果不支持命名的字符集
      自 JDK 版本:
      1.5
    • PrintWriter

      public PrintWriter(String fileName, Charset charset) throws IOException
      创建一个新的 PrintWriter,不自动刷新行,使用指定的文件名和字符集。此便利构造函数将创建必要的中间 OutputStreamWriter,它将使用提供的字符集对字符进行编码。
      参数:
      fileName - 要用作此写入器目的地的文件的名称。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      charset - 一个 charset
      抛出:
      IOException - 如果在打开或创建文件时发生 I/O 错误
      SecurityException - 如果存在安全管理器并且 checkWrite(fileName) 拒绝对文件的写访问
      自 JDK 版本:
      10
    • PrintWriter

      public PrintWriter(File file) throws FileNotFoundException
      创建一个新的 PrintWriter,不自动刷新行,使用指定的文件。此便利构造函数将创建必要的中间 OutputStreamWriter,它将使用此 Java 虚拟机实例的 默认字符集 对字符进行编码。
      参数:
      file - 要用作此写入器目的地的文件。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      抛出:
      FileNotFoundException - 如果给定的文件对象不表示现有的可写常规文件,且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误
      SecurityException - 如果存在安全管理器并且 checkWrite(file.getPath()) 拒绝对文件的写访问
      自 JDK 版本:
      1.5
      参见:
    • PrintWriter

      public PrintWriter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException
      创建一个新的 PrintWriter,不自动刷新行,使用指定的文件和字符集。此便利构造函数将创建必要的中间 OutputStreamWriter,它将使用提供的字符集对字符进行编码。
      参数:
      file - 要用作此写入器目的地的文件。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      csn - 支持的字符集的名称 charset
      抛出:
      FileNotFoundException - 如果给定的文件对象不表示现有的可写常规文件,且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误
      SecurityException - 如果存在安全管理器并且 checkWrite(file.getPath()) 拒绝对文件的写访问
      UnsupportedEncodingException - 如果不支持命名的字符集
      自 JDK 版本:
      1.5
    • PrintWriter

      public PrintWriter(File file, Charset charset) throws IOException
      创建一个新的 PrintWriter,不自动刷新行,使用指定的文件和字符集。此便利构造函数将创建必要的中间 OutputStreamWriter,它将使用提供的字符集对字符进行编码。
      参数:
      file - 要用作此写入器目的地的文件。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。
      charset - 一个 charset
      抛出:
      IOException - 如果在打开或创建文件时发生 I/O 错误
      SecurityException - 如果存在安全管理器并且 checkWrite(file.getPath()) 拒绝对文件的写访问
      自 JDK 版本:
      10
  • Method Details

    • flush

      public void flush()
      刷新流。
      接口实现:
      flush 在接口 Flushable
      类中覆盖:
      flush 在类 Writer
      参见:
    • close

      public void close()
      关闭流并释放与其关联的任何系统资源。关闭先前关闭的流不会产生任何效果。
      接口实现:
      close 在接口 AutoCloseable
      接口实现:
      close 在接口 Closeable
      类中覆盖:
      close 在类 Writer
      参见:
    • checkError

      public boolean checkError()
      如果流未关闭,则刷新流并检查其错误状态。
      返回:
      true 仅当此流遇到 IOException,或者已调用 setError 方法时
    • setError

      protected void setError()
      将流的错误状态设置为 true

      此方法将导致后续调用 checkError() 返回 true,直到调用 clearError() 为止。

    • clearError

      protected void clearError()
      清除此流的错误状态。

      此方法将导致后续调用 checkError() 返回 false,直到另一个写操作失败并调用 setError() 为止。

      自 JDK 版本:
      1.6
    • write

      public void write(int c)
      写入单个字符。
      覆盖:
      write 在类 Writer
      参数:
      c - 指定要写入的字符的 int 值。
    • write

      public void write(char[] buf, int off, int len)
      写入字符数组的一部分。
      接口实现:
      write 在类 Writer
      参数:
      buf - 字符数组
      off - 开始写入字符的偏移量
      len - 要写入的字符数
      抛出:
      IndexOutOfBoundsException - 如果 offlen 参数的值导致底层 Writer 的相应方法抛出 IndexOutOfBoundsException
    • write

      public void write(char[] buf)
      写入字符数组。此方法无法从 Writer 类继承,因为它必须抑制 I/O 异常。
      覆盖:
      write 在类 Writer
      参数:
      buf - 要写入的字符数组
    • write

      public void write(String s, int off, int len)
      写入字符串的一部分。
      覆盖:
      write 在类 Writer
      参数:
      s - 一个字符串
      off - 开始写入字符的偏移量
      len - 要写入的字符数
      抛出:
      IndexOutOfBoundsException - 如果offlen参数的值导致底层Writer的相应方法抛出IndexOutOfBoundsException
    • write

      public void write(String s)
      写入一个字符串。此方法无法从Writer类继承,因为它必须抑制I/O异常。
      覆盖:
      write 在类 Writer
      参数:
      s - 要写入的字符串
    • print

      public void print(boolean b)
      打印一个布尔值。由String.valueOf(boolean)产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      b - 要打印的boolean
      参见:
    • print

      public void print(char c)
      打印一个字符。根据默认字符集,字符被转换为一个或多个字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      c - 要打印的char
      参见:
    • print

      public void print(int i)
      打印一个整数。由String.valueOf(int)产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      i - 要打印的int
      参见:
    • print

      public void print(long l)
      打印一个长整数。由String.valueOf(long)产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      l - 要打印的long
      参见:
    • print

      public void print(float f)
      打印一个浮点数。由String.valueOf(float)产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      f - 要打印的float
      参见:
    • print

      public void print(double d)
      打印一个双精度浮点数。由String.valueOf(double)产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      d - 要打印的double
      参见:
    • print

      public void print(char[] s)
      打印一个字符数组。字符根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      s - 要打印的字符数组
      抛出:
      NullPointerException - 如果snull
      参见:
    • print

      public void print(String s)
      打印一个字符串。如果参数为null,则打印字符串"null"。否则,字符串的字符根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      s - 要打印的String
      参见:
    • print

      public void print(Object obj)
      打印一个对象。由String.valueOf(Object)方法产生的字符串根据默认字符集转换为字节,然后以与write(int)方法完全相同的方式写入。
      参数:
      obj - 要打印的Object
      参见:
    • println

      public void println()
      通过写入行分隔符字符串终止当前行。行分隔符是System.lineSeparator(),并不一定是单个换行符('\n')。
    • println

      public void println(boolean x)
      打印一个布尔值,然后终止行。此方法的行为就像调用print(boolean),然后调用println()一样。
      参数:
      x - 要打印的boolean
    • println

      public void println(char x)
      打印一个字符,然后终止行。此方法的行为就像调用print(char),然后调用println()一样。
      参数:
      x - 要打印的char
    • println

      public void println(int x)
      打印一个整数,然后终止行。此方法的行为就像调用print(int),然后调用println()一样。
      参数:
      x - 要打印的int
    • println

      public void println(long x)
      打印一个长整数,然后终止行。此方法的行为就像调用print(long),然后调用println()一样。
      参数:
      x - 要打印的long
    • println

      public void println(float x)
      打印一个浮点数,然后终止行。此方法的行为就像调用print(float),然后调用println()一样。
      参数:
      x - 要打印的float
    • println

      public void println(double x)
      打印一个双精度浮点数,然后终止行。此方法的行为就像调用print(double),然后调用println()一样。
      参数:
      x - 要打印的double
    • println

      public void println(char[] x)
      打印一个字符数组,然后终止行。此方法的行为就像调用print(char[]),然后调用println()一样。
      参数:
      x - 要打印的char值数组
    • println

      public void println(String x)
      打印一个字符串,然后终止行。此方法的行为就像调用print(String),然后调用println()一样。
      参数:
      x - 要打印的String
    • println

      public void println(Object x)
      打印一个对象,然后终止行。此方法首先调用String.valueOf(x)以获取要打印对象的字符串值,然后行为就像调用print(String),然后调用println()一样。
      参数:
      x - 要打印的Object
    • printf

      public PrintWriter printf(String format, Object... args)
      使用指定的格式字符串和参数向此写入器写入格式化字符串的便捷方法。如果启用了自动刷新,则调用此方法将刷新输出缓冲区。

      形式为out.printf(format, args)的此方法的调用行为与调用

          out.format(format, args)
      
      参数:
      format - 格式字符串,如格式字符串语法中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数比格式说明符多,额外的参数将被忽略。参数的数量是可变的,可以为零。参数的最大数量受Java数组的最大维度限制,由Java虚拟机规范定义。对于null参数的行为取决于转换
      返回:
      此写入器
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化器类规范的详细信息部分。
      NullPointerException - 如果formatnull
      自:
      1.5
    • printf

      public PrintWriter printf(Locale l, String format, Object... args)
      使用指定的格式字符串和参数向此写入器写入格式化字符串的便利方法。如果启用了自动刷新,则调用此方法将刷新输出缓冲区。

      形式为out.printf(l, format, args)的调用的行为与调用

          out.format(l, format, args)
      
      参数:
      l - 在格式化期间应用的区域设置。如果lnull,则不应用本地化。
      format - 格式字符串,如格式字符串语法中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数比格式说明符多,额外的参数将被忽略。参数的数量是可变的,可以为零。参数的最大数量受Java数组的最大维度限制,由Java虚拟机规范定义。对于null参数的行为取决于转换
      返回:
      此写入器
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化器类规范的详细信息部分。
      NullPointerException - 如果formatnull
      自:
      1.5
    • format

      public PrintWriter format(String format, Object... args)
      使用指定的格式字符串和参数向此写入器写入格式化字符串。如果启用了自动刷新,则调用此方法将刷新输出缓冲区。

      始终使用的区域设置是由Locale.getDefault()返回的区域设置,而不管此对象上之前调用其他格式化方法的任何情况。

      参数:
      format - 格式字符串,如格式字符串语法中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数比格式说明符多,额外的参数将被忽略。参数的数量是可变的,可以为零。参数的最大数量受Java数组的最大维度限制,由Java虚拟机规范定义。对于null参数的行为取决于转换
      返回:
      此写入器
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化器类规范的详细信息部分。
      NullPointerException - 如果formatnull
      自:
      1.5
    • format

      public PrintWriter format(Locale l, String format, Object... args)
      使用指定的格式字符串和参数向此写入器写入格式化字符串。如果启用了自动刷新,则调用此方法将刷新输出缓冲区。
      参数:
      l - 在格式化期间应用的区域设置。如果lnull,则不应用本地化。
      format - 格式字符串,如格式字符串语法中所述。
      args - 格式字符串中格式说明符引用的参数。如果参数比格式说明符多,额外的参数将被忽略。参数的数量是可变的,可以为零。参数的最大数量受Java数组的最大维度限制,由Java虚拟机规范定义。对于null参数的行为取决于转换
      返回:
      此写入器
      抛出:
      IllegalFormatException - 如果格式字符串包含非法语法、与给定参数不兼容的格式说明符、给定格式字符串的参数不足或其他非法条件。有关所有可能的格式错误的规范,请参阅格式化器类规范的详细信息部分。
      NullPointerException - 如果formatnull
      自:
      1.5
    • append

      public PrintWriter append(CharSequence csq)
      将指定的字符序列附加到此写入器。

      形式为out.append(csq)的调用的行为与调用

          out.write(csq.toString())
      

      根据字符序列csqtoString规范,可能不会附加整个序列。例如,调用字符缓冲区的toString方法将返回一个内容取决于缓冲区的位置和限制的子序列。

      指定者:
      append 在接口 Appendable
      覆盖:
      append 在类 Writer
      参数:
      csq - 要附加的字符序列。如果csqnull,则将四个字符"null"附加到此写入器。
      返回:
      此写入器
      自:
      1.5
    • append

      public PrintWriter append(CharSequence csq, int start, int end)
      将指定字符序列的子序列附加到此写入器。

      csq不为null时,形式为out.append(csq, start, end)的调用的行为与调用

          out.write(csq.subSequence(start, end).toString())
      
      指定者:
      append 在接口 Appendable
      覆盖:
      append 在类 Writer
      参数:
      csq - 要附加子序列的字符序列。如果csqnull,则将字符附加为如果csq包含四个字符"null"
      start - 子序列中第一个字符的索引
      end - 子序列中最后一个字符之后的字符的索引
      返回:
      此写入器
      抛出:
      IndexOutOfBoundsException - 如果startend为负数,start大于end,或end大于csq.length()
      自:
      1.5
    • append

      public PrintWriter append(char c)
      将指定的字符附加到此写入器。

      形式为out.append(c)的调用的行为与调用

          out.write(c)
      
      指定由:
      append 在接口 Appendable
      覆盖:
      append 在类 Writer
      参数:
      c - 要追加的16位字符
      返回:
      此写入器
      自版本:
      1.5