全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java中的PrintWriter 介绍_动力节点Java学院整理

PrintWriter 介绍

PrintWriter 是字符类型的打印输出流,它继承于Writer。

PrintStream 用于向文本输出流打印对象的格式化表示形式。它实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。 

PrintWriter 函数列表

PrintWriter(OutputStream out)
PrintWriter(OutputStream out, boolean autoFlush)
PrintWriter(Writer wr)
PrintWriter(Writer wr, boolean autoFlush)
PrintWriter(File file)
PrintWriter(File file, String csn)
PrintWriter(String fileName)
PrintWriter(String fileName, String csn)
PrintWriter   append(char c)
PrintWriter   append(CharSequence csq, int start, int end)
PrintWriter   append(CharSequence csq)
boolean   checkError()
void   close()
void   flush()
PrintWriter   format(Locale l, String format, Object... args)
PrintWriter   format(String format, Object... args)
void   print(float fnum)
void   print(double dnum)
void   print(String str)
void   print(Object obj)
void   print(char ch)
void   print(char[] charArray)
void   print(long lnum)
void   print(int inum)
void   print(boolean bool)
PrintWriter   printf(Locale l, String format, Object... args)
PrintWriter   printf(String format, Object... args)
void   println()
void   println(float f)
void   println(int i)
void   println(long l)
void   println(Object obj)
void   println(char[] chars)
void   println(String str)
void   println(char c)
void   println(double d)
void   println(boolean b)
void   write(char[] buf, int offset, int count)
void   write(int oneChar)
void   write(char[] buf)
void   write(String str, int offset, int count)
void   write(String str)
 
PrintWriter 源码
 
  package java.io;
  import java.util.Objects;
  import java.util.Formatter;
  import java.util.Locale;
  import java.nio.charset.Charset;
  import java.nio.charset.IllegalCharsetNameException;
  import java.nio.charset.UnsupportedCharsetException;
 public class PrintWriter extends Writer {
   protected Writer out;
   // 自动flush
   // 所谓“自动flush”,就是每次执行print(), println(), write()函数,都会调用flush()函数;
   // 而“不自动flush”,则需要我们手动调用flush()接口。
   private final boolean autoFlush;
   // PrintWriter是否右产生异常。当PrintWriter有异常产生时,会被本身捕获,并设置trouble为true
   private boolean trouble = false;
   // 用于格式化的对象
   private Formatter formatter;
   private PrintStream psOut = null;
   // 行分割符
   private final String lineSeparator;
   // 获取csn(字符集名字)对应的Chaset
   private static Charset toCharset(String csn)
     throws UnsupportedEncodingException
   {
     Objects.requireNonNull(csn, "charsetName");
     try {
       return Charset.forName(csn);
     } catch (IllegalCharsetNameException|UnsupportedCharsetException unused) {
       // UnsupportedEncodingException should be thrown
       throw new UnsupportedEncodingException(csn);
     }
   }
   // 将“Writer对象out”作为PrintWriter的输出流,默认不会自动flush,并且采用默认字符集。
   public PrintWriter (Writer out) {
     this(out, false);
   }
   // 将“Writer对象out”作为PrintWriter的输出流,autoFlush的flush模式,并且采用默认字符集。
   public PrintWriter(Writer out, boolean autoFlush) {
     super(out);
     this.out = out;
     this.autoFlush = autoFlush;
     lineSeparator = java.security.AccessController.doPrivileged(
       new sun.security.action.GetPropertyAction("line.separator"));
   }
   // 将“输出流对象out”作为PrintWriter的输出流,不自动flush,并且采用默认字符集。
   public PrintWriter(OutputStream out) {
     this(out, false);
   }
   // 将“输出流对象out”作为PrintWriter的输出流,autoFlush的flush模式,并且采用默认字符集。
   public PrintWriter(OutputStream out, boolean autoFlush) {
     // new OutputStreamWriter(out):将“字节类型的输出流”转换为“字符类型的输出流”
     // new BufferedWriter(...): 为输出流提供缓冲功能。
     this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);
     // save print stream for error propagation
     if (out instanceof java.io.PrintStream) {
       psOut = (PrintStream) out;
     }
   }
   // 创建fileName对应的OutputStreamWriter,进而创建BufferedWriter对象;然后将该BufferedWriter作为PrintWriter的输出流,不自动flush,采用默认字符集。
   public PrintWriter(String fileName) throws FileNotFoundException {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),
        false);
   }
   // 创建fileName对应的OutputStreamWriter,进而创建BufferedWriter对象;然后将该BufferedWriter作为PrintWriter的输出流,不自动flush,采用字符集charset。
   private PrintWriter(Charset charset, File file)
     throws FileNotFoundException
   {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset)),
        false);
   }
   // 创建fileName对应的OutputStreamWriter,进而创建BufferedWriter对象;然后将该BufferedWriter作为PrintWriter的输出流,不自动flush,采用csn字符集。
   public PrintWriter(String fileName, String csn)
     throws FileNotFoundException, UnsupportedEncodingException
   {
     this(toCharset(csn), new File(fileName));
   }
   // 创建file对应的OutputStreamWriter,进而创建BufferedWriter对象;然后将该BufferedWriter作为PrintWriter的输出流,不自动flush,采用默认字符集。
   public PrintWriter(File file) throws FileNotFoundException {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
        false);
   }
   // 创建file对应的OutputStreamWriter,进而创建BufferedWriter对象;然后将该BufferedWriter作为PrintWriter的输出流,不自动flush,采用csn字符集。
   public PrintWriter(File file, String csn)
     throws FileNotFoundException, UnsupportedEncodingException
   {
     this(toCharset(csn), file);
   }
   private void ensureOpen() throws IOException {
     if (out == null)
       throw new IOException("Stream closed");
   }
   // flush“PrintWriter输出流中的数据”。
   public void flush() {
     try {
       synchronized (lock) {
         ensureOpen();
         out.flush();
       }
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   public void close() {
     try {
       synchronized (lock) {
         if (out == null)
           return;
         out.close();
         out = null;
       }
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   // flush“PrintWriter输出流缓冲中的数据”,并检查错误
   public boolean checkError() {
     if (out != null) {
       flush();
     }
     if (out instanceof java.io.PrintWriter) {
       PrintWriter pw = (PrintWriter) out;
       return pw.checkError();
     } else if (psOut != null) {
       return psOut.checkError();
     }
     return trouble;
   }
   protected void setError() {
     trouble = true;
   }
   protected void clearError() {
     trouble = false;
   }
   // 将字符c写入到“PrintWriter输出流”中。c虽然是int类型,但实际只会写入一个字符
   public void write(int c) {
     try {
       synchronized (lock) {
         ensureOpen();
         out.write(c);
       }
     }
     catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   // 将“buf中从off开始的len个字符”写入到“PrintWriter输出流”中。
   public void write(char buf[], int off, int len) {
     try {
       synchronized (lock) {
         ensureOpen();
         out.write(buf, off, len);
       }
     }
     catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   // 将“buf中的全部数据”写入到“PrintWriter输出流”中。
   public void write(char buf[]) {
     write(buf, , buf.length);
   }
   // 将“字符串s中从off开始的len个字符”写入到“PrintWriter输出流”中。
   public void write(String s, int off, int len) {
     try {
       synchronized (lock) {
         ensureOpen();
         out.write(s, off, len);
       }
     }
     catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   // 将“字符串s”写入到“PrintWriter输出流”中。
   public void write(String s) {
     write(s, , s.length());
   }
   // 将“换行符”写入到“PrintWriter输出流”中。
   private void newLine() {
     try {
       synchronized (lock) {
         ensureOpen();
         out.write(lineSeparator);
         if (autoFlush)
           out.flush();
       }
     }
     catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     }
     catch (IOException x) {
       trouble = true;
     }
   }
   // 将“boolean数据对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(boolean b) {
     write(b ? "true" : "false");
   }
   // 将“字符c对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(char c) {
     write(c);
   }
   // 将“int数据i对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(int i) {
     write(String.valueOf(i));
   }
   // 将“long型数据l对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(long l) {
     write(String.valueOf(l));
   }
   // 将“float数据f对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(float f) {
     write(String.valueOf(f));
   }
   // 将“double数据d对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(double d) {
     write(String.valueOf(d));
   }
   // 将“字符数组s”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(char s[]) {
     write(s);
   }
   // 将“字符串数据s”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(String s) {
     if (s == null) {
       s = "null";
     }
     write(s);
   }
   // 将“对象obj对应的字符串”写入到“PrintWriter输出流”中,print实际调用的是write函数
   public void print(Object obj) {
     write(String.valueOf(obj));
   }
   // 将“换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println() {
     newLine();
   }
   // 将“boolean数据对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(boolean x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“字符x对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(char x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“int数据对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(int x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“long数据对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(long x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“float数据对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(float x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“double数据对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(double x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“字符数组x+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(char x[]) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“字符串x+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(String x) {
     synchronized (lock) {
       print(x);
       println();
     }
   }
   // 将“对象o对应的字符串+换行符”写入到“PrintWriter输出流”中,println实际调用的是write函数
   public void println(Object x) {
     String s = String.valueOf(x);
     synchronized (lock) {
       print(s);
       println();
     }
   }
   // 将“数据args”根据“默认Locale值(区域属性)”按照format格式化,并写入到“PrintWriter输出流”中
   public PrintWriter printf(String format, Object ... args) {
     return format(format, args);
   }
   // 将“数据args”根据“Locale值(区域属性)”按照format格式化,并写入到“PrintWriter输出流”中
   public PrintWriter printf(Locale l, String format, Object ... args) {
     return format(l, format, args);
   }
   // 根据“默认的Locale值(区域属性)”来格式化数据
   public PrintWriter format(String format, Object ... args) {
     try {
       synchronized (lock) {
         ensureOpen();
         if ((formatter == null)
           || (formatter.locale() != Locale.getDefault()))
           formatter = new Formatter(this);
         formatter.format(Locale.getDefault(), format, args);
         if (autoFlush)
           out.flush();
       }
     } catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     } catch (IOException x) {
       trouble = true;
     }
     return this;
   }
   // 根据“Locale值(区域属性)”来格式化数据
   public PrintWriter format(Locale l, String format, Object ... args) {
     try {
       synchronized (lock) {
         ensureOpen();
         if ((formatter == null) || (formatter.locale() != l))
           formatter = new Formatter(this, l);
         formatter.format(l, format, args);
         if (autoFlush)
           out.flush();
       }
     } catch (InterruptedIOException x) {
       Thread.currentThread().interrupt();
     } catch (IOException x) {
       trouble = true;
     }
     return this;
   }
   // 将“字符序列的全部字符”追加到“PrintWriter输出流中”
   public PrintWriter append(CharSequence csq) {
     if (csq == null)
       write("null");
     else
       write(csq.toString());
     return this;
   }
   // 将“字符序列从start(包括)到end(不包括)的全部字符”追加到“PrintWriter输出流中”
   public PrintWriter append(CharSequence csq, int start, int end) {
     CharSequence cs = (csq == null ? "null" : csq);
     write(cs.subSequence(start, end).toString());
     return this;
   }
   // 将“字符c”追加到“PrintWriter输出流中”
   public PrintWriter append(char c) {
     write(c);
     return this;
   }
 }

 示例代码

关于PrintWriter中API的详细用法,参考示例代码(PrintWriterTest.java): 

import java.io.PrintWriter;
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  /**
  * PrintWriter 的示例程序
  *
  * 
  */
 public class PrintWriterTest {
   public static void main(String[] args) {
     // 下面个函数的作用都是一样:都是将字母“abcde”写入到文件“file.txt”中。
     // 任选一个执行即可!
     testPrintWriterConstrutor() ;
     //testPrintWriterConstrutor() ;
     //testPrintWriterConstrutor() ;
     // 测试write(), print(), println(), printf()等接口。
     testPrintWriterAPIS() ;
   }
   /**
    * PrintWriter(OutputStream out) 的测试函数
    *
    * 函数的作用,就是将字母“abcde”写入到文件“file.txt”中
    */
   private static void testPrintWriterConstrutor() {
     final char[] arr={'a', 'b', 'c', 'd', 'e' };
     try {
       // 创建文件“file.txt”的File对象
       File file = new File("file.txt");
       // 创建文件对应FileOutputStream
       PrintWriter out = new PrintWriter(
           new FileOutputStream(file));
       // 将“字节数组arr”全部写入到输出流中
       out.write(arr);
       // 关闭输出流
       out.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   /**
    * PrintWriter(File file) 的测试函数
    *
    * 函数的作用,就是将字母“abcde”写入到文件“file.txt”中
    */
   private static void testPrintWriterConstrutor() {
     final char[] arr={'a', 'b', 'c', 'd', 'e' };
     try {
       File file = new File("file.txt");
       PrintWriter out = new PrintWriter(file);
       out.write(arr);
       out.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   /**
    * PrintWriter(String fileName) 的测试函数
    *
    * 函数的作用,就是将字母“abcde”写入到文件“file.txt”中
    */
   private static void testPrintWriterConstrutor() {
     final char[] arr={'a', 'b', 'c', 'd', 'e' };
     try {
       PrintWriter out = new PrintWriter("file.txt");
       out.write(arr);
       out.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   /**
    * 测试write(), print(), println(), printf()等接口。
    */
   private static void testPrintWriterAPIS() {
     final char[] arr={'a', 'b', 'c', 'd', 'e' };
     try {
       // 创建文件对应FileOutputStream
       PrintWriter out = new PrintWriter("other.txt");
       // 将字符串“hello PrintWriter”+回车符,写入到输出流中
       out.println("hello PrintWriter");
       // 将x写入到输出流中
       // x对应ASCII码的字母'A',也就是写入字符'A'
       out.write(x);
       // 将字符串""写入到输出流中。
       // out.print(x); 等价于 out.write(String.valueOf(x));
       out.print(x);
       // 将字符'B'追加到输出流中
       out.append('B').append("CDEF");
       // 将"CDE is " + 回车 写入到输出流中
       String str = "GHI";
       int num = ;
       out.printf("%s is %d\n", str, num);
       out.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }

运行上面的代码,会在源码所在目录生成两个文件“file.txt”和“other.txt”。

file.txt的内容如下:

abcde

other.txt的内容如下:

hello PrintWriter
A65BCDEFGHI is 5

以上所述是小编给大家介绍的Java中的PrintWriter知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# printwriter  # 介绍  # java  # Java servlet 使用 PrintWriter 时的编码与乱码的示例代码  # Java中PrintWriter使用方法介绍  # 的是  # 换行符  # 将该  # 都是  # 小编  # 流进  # 在此  # 会在  # 只会  # 要我  # 给大家  # 它不  # 不包括  # 转换为  # 所述  # 给我留言  # 感谢大家  # 则需  # 疑问请  # 有任何 


相关文章: 临沂网站制作公司有哪些,临沂第四中学官网?  南京网站制作费用,南京远驱官方网站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  建站之星多图banner生成与模板自定义指南  购物网站制作公司有哪些,哪个购物网站比较好?  如何基于云服务器快速搭建个人网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  家庭建站与云服务器建站,如何选择更优?  如何自定义建站之星网站的导航菜单样式?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何安全更换建站之星模板并保留数据?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  广州美橙建站如何快速搭建多端合一网站?  宝塔面板如何快速创建新站点?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何有效防御Web建站篡改攻击?  建站主机无法访问?如何排查域名与服务器问题  如何通过FTP服务器快速搭建网站?  全景视频制作网站有哪些,全景图怎么做成网页?  建站主机系统SEO优化与智能配置核心关键词操作指南  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何正确选择百度移动适配建站域名?  代购小票制作网站有哪些,购物小票的简要说明?  如何在景安云服务器上绑定域名并配置虚拟主机?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  实例解析Array和String方法  清除minerd进程的简单方法  如何通过虚拟主机快速搭建个人网站?  建站之星后台管理如何实现高效配置?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何设计高效校园网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  javascript基本数据类型及类型检测常用方法小结  如何挑选最适合建站的高性能VPS主机?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  C#如何在一个XML文件中查找并替换文本内容  济南网站建设制作公司,室内设计网站一般都有哪些功能?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  ,石家庄四十八中学官网?  如何在香港服务器上快速搭建免备案网站?  高端建站如何打造兼具美学与转化的品牌官网?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站之星导航如何优化提升用户体验?  如何在Golang中指定模块版本_使用go.mod控制版本号  自助网站制作软件,个人如何自助建网站?  建站之星展会模版如何一键下载生成?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  外贸公司网站制作哪家好,maersk船公司官网?  电脑免费海报制作网站推荐,招聘海报哪个网站多? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。