文章目录
-
- 1. 概念
- 2. 字段
- 3. 方法
-
- 1. 构造器
- 2. 其他方法
- 4. 案例
1. 概念
PrintWriter 继承于 Writer 抽象类,属于字符流的一种,方法包含了写入单个字符和字符数组的方法,但不包含原始字节写入的方法。在设置自动刷新的时候,不像 PrintStream 流中遇到换行符就会刷新,PrintWriter 只有调用了 printf,println,format 三类方法其中一种才会自动刷新。PrintWriter 流永远不会抛出异常,因为当抛出异常的时候,流内部会将异常捕获 (try{}catch(){}),然后将内部标识设置成 true,表示有异常抛出,调用 checkError() 方法可获取此标识
2. 字段
- protected Writer out:底层字符输出流
- private final boolean autoFlush:是否自动刷新
- private boolean trouble = false:是否抛出异常的内部标识.当PrintStream流内部抛出异常时会捕获异常,然后将trouble的值设置成true
- private Formatter formatter:用于数据格式化的对象Formatter
- private PrintStream psOut = null:字节打印流,用于checkError()
- private final String lineSeparator:换行符,创建构造方法时会赋值
3. 方法
1. 构造器
- public PrintWriter (Writer out):创建默认编码方式的PrintWriter流.字符输出流out作为PrintWriter的输出流,不自动刷新
- public PrintWriter(Writer out,boolean autoFlush):创建默认编码方式的PrintWriter流.字符输出流作为PrintWriter的输出流,传入是否自动刷新的参数autoFlush
- public PrintWriter(OutputStream out):创建了默认编码方式的PrintWriter流,字节输出流out作为PrintWriter流的输出流,不自动刷新
- public PrintWriter(OutputStream out, boolean autoFlush):创建默认编码方式的PrintWriter流,字节输出流out作为PrintWiter流的输出流,传入是否自动刷新的参数autoFlush
- public PrintWriter(String fileName):创建了指定文件名称,默认字符编码方式的PrintWriter流,FileOutputStream流作为PrintWriter流的输出流.不自动刷新
- public PrintWriter(String fileName, String csn):创建指定了文件名称和字符编码名称csn的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新
- public PrintWriter(File file):创建指定文件对象File和默认编码方式的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新
- public PrintWriter(File file, String csn):创建指定文件对象File和编码名称csn的PrintWriter流,FileOutputStream作为PrintWriter流的输出流.不自动刷新
2. 其他方法
- public void flush():刷新流,将缓冲的数据写到底层输出流中
- public void close():关闭流,释放关联的资源
- public boolean checkError():检查流中异常状态,如果PrintWriter流中有异常抛出,返回true
- public void write(int c):将单个字符c写到PrintWriter流中
- public void write(char buf[], int off, int len):将字符数组buf中off位置开始,len个字节写到PrintWriter流中
- public void write(char buf[]):将字符数组buf写到PrintWriter流中
- public void write(String s, int off, int len):
- public void write(String s):
- public PrintWriter printf(String format, Object … args):将数据args按照默认的Locale值和format格式进行格式化后写到PrintWriter流中,方法执行等同于out.format(format, args)
- public PrintWriter printf(Locale l, String format, Object … args):将数据args根据Locale值和format格式进行格式化后写到PrintWriter输出流中,方法执行等同于out.printf(l, format,args)
- public PrintWriter format(String format, Object … args):根据默认的Locale值和format格式来格式化数据args
- public PrintWriter format(Locale l, String format, Object … args):将数据args根据Locale值和format格式进行格式化
- public PrintWriter append(CharSequence csq):
- public PrintWriter append(CharSequence csq, int start, int end):将字符序列csq中start(包含)位置到end(不包含)之间的子字符序列添加到PrintWriter输出流中,此方法执行等同于out.print(csq.subSequence(start, end).toString())
- public PrintWriter append(char c):将单个字符添加到PrintWriter输出流中.此方法执行等同于out.print?
对于下面 print(Object obj) 的重载方法与 println(Object obj) 的重载方法,总结如下:两个区别是 println(Object obj) 在写完数据后,会写入一个换行符,而这两类方法写入数据时都会先将数据转成字符串,然后调用底层输出流写到文件中(比如boolean类型的数据true,会先转成字符串"true"),所以实际调用的方法是 write(String s)
- public void print(boolean b):将boolean类型数据对应字符串写到PrintWriter流中
- public void print(char c):将char类型数据对应字符串写到PrintWriter流中
- public void print(int i):将int类型数据对应字符串写到PrintWriter流中
- public void print(long l):将long类型数据对应字符串写到PrintWriter流中
- public void print(float f):将float类型数据对应字符串写到PrintWriter流中
- public void print(double d):将double类型数据对应字符串写到PrintWriter流中
- public void print(char s[]):将字符数组写到PrintWriter流中
- public void print(String s):将字符串s写到PrintWriter流中
- public void print(Object obj):将对象Obj对应字符串写到PrintWriter流中
- public void println():将换行符写到PrintWriter流中
- public void println(boolean x)
- public void println(char x)
- public void println(int x)
- public void println(long x)
- public void println(float x)
- public void println(double x)
- public void println(char x[])
- public void println(String x)
- 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