当前位置: 代码迷 >> 综合 >> Java IO (17) -- PrintWriter 类
  详细解决方案

Java IO (17) -- PrintWriter 类

热度:9   发布时间:2023-12-16 13:24:33.0

文章目录

    • 1. 概念
    • 2. 字段
    • 3. 方法
      • 1. 构造器
      • 2. 其他方法
    • 4. 案例

1. 概念

PrintWriter 继承于 Writer 抽象类,属于字符流的一种,方法包含了写入单个字符和字符数组的方法,但不包含原始字节写入的方法。在设置自动刷新的时候,不像 PrintStream 流中遇到换行符就会刷新,PrintWriter 只有调用了 printf,println,format 三类方法其中一种才会自动刷新。PrintWriter 流永远不会抛出异常,因为当抛出异常的时候,流内部会将异常捕获 (try{}catch(){}),然后将内部标识设置成 true,表示有异常抛出,调用 checkError() 方法可获取此标识

2. 字段

  1. protected Writer out:底层字符输出流
  2. private final boolean autoFlush:是否自动刷新
  3. private boolean trouble = false:是否抛出异常的内部标识.当PrintStream流内部抛出异常时会捕获异常,然后将trouble的值设置成true
  4. private Formatter formatter:用于数据格式化的对象Formatter
  5. private PrintStream psOut = null:字节打印流,用于checkError()
  6. private final String lineSeparator:换行符,创建构造方法时会赋值

3. 方法

1. 构造器

  1. public PrintWriter (Writer out):创建默认编码方式的PrintWriter流.字符输出流out作为PrintWriter的输出流,不自动刷新
  2. public PrintWriter(Writer out,boolean autoFlush):创建默认编码方式的PrintWriter流.字符输出流作为PrintWriter的输出流,传入是否自动刷新的参数autoFlush
  3. public PrintWriter(OutputStream out):创建了默认编码方式的PrintWriter流,字节输出流out作为PrintWriter流的输出流,不自动刷新
  4. public PrintWriter(OutputStream out, boolean autoFlush):创建默认编码方式的PrintWriter流,字节输出流out作为PrintWiter流的输出流,传入是否自动刷新的参数autoFlush
  5. public PrintWriter(String fileName):创建了指定文件名称,默认字符编码方式的PrintWriter流,FileOutputStream流作为PrintWriter流的输出流.不自动刷新
  6. public PrintWriter(String fileName, String csn):创建指定了文件名称和字符编码名称csn的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新
  7. public PrintWriter(File file):创建指定文件对象File和默认编码方式的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新
  8. public PrintWriter(File file, String csn):创建指定文件对象File和编码名称csn的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新

2. 其他方法

  1. public void flush():刷新流,将缓冲的数据写到底层输出流中
  2. public void close():关闭流,释放关联的资源
  3. public boolean checkError():检查流中异常状态,如果PrintWriter流中有异常抛出,返回true
  4. public void write(int c):将单个字符c写到PrintWriter流中
  5. public void write(char buf[], int off, int len):将字符数组buf中off位置开始,len个字节写到PrintWriter流中
  6. public void write(char buf[]):将字符数组buf写到PrintWriter流中
  7. public void write(String s, int off, int len):
  8. public void write(String s):
  9. public PrintWriter printf(String format, Object … args):将数据args按照默认的Locale值和format格式进行格式化后写到PrintWriter流中,方法执行等同于out.format(format, args)
  10. public PrintWriter printf(Locale l, String format, Object … args):将数据args根据Locale值和format格式进行格式化后写到PrintWriter输出流中,方法执行等同于out.printf(l, format,args)
  11. public PrintWriter format(String format, Object … args):根据默认的Locale值和format格式来格式化数据args
  12. public PrintWriter format(Locale l, String format, Object … args):将数据args根据Locale值和format格式进行格式化
  13. public PrintWriter append(CharSequence csq):
  14. public PrintWriter append(CharSequence csq, int start, int end):将字符序列csq中start(包含)位置到end(不包含)之间的子字符序列添加到PrintWriter输出流中,此方法执行等同于out.print(csq.subSequence(start, end).toString())
  15. public PrintWriter append(char c):将单个字符添加到PrintWriter输出流中.此方法执行等同于out.print?

对于下面 print(Object obj) 的重载方法与 println(Object obj) 的重载方法,总结如下:两个区别是 println(Object obj) 在写完数据后,会写入一个换行符,而这两类方法写入数据时都会先将数据转成字符串,然后调用底层输出流写到文件中(比如boolean类型的数据true,会先转成字符串"true"),所以实际调用的方法是 write(String s)

  1. public void print(boolean b):将boolean类型数据对应字符串写到PrintWriter流中
  2. public void print(char c):将char类型数据对应字符串写到PrintWriter流中
  3. public void print(int i):将int类型数据对应字符串写到PrintWriter流中
  4. public void print(long l):将long类型数据对应字符串写到PrintWriter流中
  5. public void print(float f):将float类型数据对应字符串写到PrintWriter流中
  6. public void print(double d):将double类型数据对应字符串写到PrintWriter流中
  7. public void print(char s[]):将字符数组写到PrintWriter流中
  8. public void print(String s):将字符串s写到PrintWriter流中
  9. public void print(Object obj):将对象Obj对应字符串写到PrintWriter流中
  10. public void println():将换行符写到PrintWriter流中
  11. public void println(boolean x)
  12. public void println(char x)
  13. public void println(int x)
  14. public void println(long x)
  15. public void println(float x)
  16. public void println(double x)
  17. public void println(char x[])
  18. public void println(String x)
  19. public void println(Object x)

4. 案例

class PrintWriterDemo {
    public static void main(String[] args) throws IOException {
    final String fileName = "D:\\java.txt";File file = new File(fileName);testPrintMethod(fileName, file);testOtherMethod(fileName,file);testMethod();}//构造方法,传入System.outprivate static void testMethod() {
    PrintWriter out = new PrintWriter(System.out);String str = "of PrintWriter";char buf[] = new char[] {
    'A','B','D','E','F'};out.println(str);out.println(buf);out.print(true);out.print(1);out.print(3.14);out.println();out.print(out);//测试out.print(Object obj);out.println();out.append('J');out.println(out.checkError());out.format(Locale.UK,"this is demo %s", str);out.flush();out.close();}private static void testOtherMethod(String fileName,File file) throws IOException {
    PrintWriter pw = new PrintWriter(fileName);pw.write("helloworld".toCharArray());pw.println();pw.format("文件名称:%s", file.getName());pw.println();pw.write(0x41);pw.append("abcde");pw.close();}private static void testPrintMethod(final String fileName, File file) throws FileNotFoundException {
    PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));pw.println('a');pw.println("hello");pw.println(2345);pw.print(3.1415);pw.println();//写入换行符.pw.printf("文件名称:%s,是否可读:%s", file.getName(),file.canRead());pw.println();pw.close();}
}
// 结果
of PrintWriter
ABDEF
true13.14
java.io.PrintWriter@61bbe9ba
Jfalse
this is demo of PrintWriter

在这里插入图片描述

  相关解决方案