PrintWrite类本质上是PrintStream的面向字符版本,实现了Appendable、AutoCloseable、Closeable以及Flushable接口。PrintWrite类具有几个构造函数。如下所示:
PrintWriter(OutputStream outputStream)
PrintWriter(OutputStream outputStream,boolean flushOnNewline)
PrintWriter(Writer outputStream)
PrintWriter(Writer outputStream,boolean flushOnNewline)
其中,OutputStream指定了将接收输出的打开的OutputStream对象。flushOnNewline参数控制每次调用println()、print()、或format()是否自动刷新输出缓存。如果flushOnNewline为true,就自动刷新;如果为false就不自动刷新。没有指定flushOnNewline参数的构造函数不自动刷新。
下面这几个构造函数为构造向文件中写入输出的PrintWrite对象提供了简便方法:
PrintWriter(File outputFile) throws FileNotFoundException
PrintWriter(File outputFile,String charSet)
throws FileNotFoundException,UnsupportedEncodingException
PrintWriter(String outputFileName) throws FileNotFoundException
PrintWriter(String outputFileName,String charSet)
throws FileNotFoundException,UnsupportedEncodingException
这些构造函数允许从File对象或根据指定的文件名创建PrintWrite对象。对于每种形式,都会自动创建文件。所有之前创建的同名文件都会被销毁。一旦创建PrintWrite对象,就将所有输出定向到指定的文件。可以通过charSet传递的名称来指定文件编码。
PrintWrite为所有类型(包括Object)都支持print()和println()方法。如果参数不是基本类型,那么PrintWrite方法会调用对象的toString方法,然后输出结果。
PrintWrite还支持printf()方法,它的工作方式与前面介绍的PrintWrite类中的printf()方法相同。该方法允许指定数据的精确格式。下面是在PrintWrite类中声明的printf()方法:
PrintWriter printf(String fmtString,Object...args)
PrintWriter printf(Locale loc,String fmtString,Object...args)
第一个版本使用fmtString指定的格式将args写入到标准输出,使用默认地区。第二个版本允许指定地区。这两个版本都返回调用PrintWrite对象
PrintWrite类也支持format()方法,该方法具有以下一般形式:
PrintWriter format(String fmtString,Object...args)
PrintWriter format(Locale loc,String fmtString,Object...args)
format()方法的工作方式与printf()方法完全类似。
下面是PrintWrite类的一些具体用法,如下所示:
注意:System.out属于OutputStream类,用于后台程序输出
下面是总结的一些具体用法:
import java.io.*; class ObjectDemo1{ String s="这是被打印的对象"; public String toString(){ //System.out.println(s);//在控制台输出显示 return s;//返回描述对象的字符串 } } class PrintWriterDemo { static void p(PrintWriter pw){ char c[]={'这','是','子','符','数','组'}; String s="这是要写入的字符串"; pw.print(new ObjectDemo1()); pw.println(); pw.println(2>3); //打印boolean值 pw.println(c);//打印字符数组 pw.println(1.2345678);//打印精度浮点数 pw.println(100); //打印一个整型数 pw.println("这是要打印的字符串"); //打印一个字符串 pw.printf("姓名:%s\t性别:%c\t年龄:%d\t出生日期:%d\t","刘勋",'男',21,1993); pw.println();//格式化打印 pw.format("姓名:%s\t性别:%c\t年龄:%d\t出生日期:%d\t","刘勋",'男',21,1993); pw.println();//与上例相同 pw.write("这是要写入的内容"); pw.println();//写入字符串 pw.write(c,1,4); pw.println();//写入字符数组的某一部分 pw.write(s,2,6);//写入字符串中的某一部分 } public static void main(String[] args) throws IOException{ File f=new File("c:1.txt"); FileWriter f1=new FileWriter("c:2.txt"); try( PrintWriter pw1=new PrintWriter(f,"gbk");//f是File对象 PrintWriter pw2=new PrintWriter(System.out);//System.out是OutputStream子类,在运行结果中进行显示 PrintWriter pw3=new PrintWriter(f1);//FileWriter是继承自Writer类 PrintWriter pw4=new PrintWriter("c:3.txt","gbk");//按照字符集写入文件名指定的文件 ){ p(pw1); p(pw2); p(pw3); p(pw4); }catch(IOException e){ System.out.println("I/O Error: "+e); } } }
程序输出结果如下:
文件1,2,3的内容如下所示:
文件3的内容与以上一样,在此不在截图