首页 > 编程语言 >JavaSE(三十一)-IO流--PrintWriter类

JavaSE(三十一)-IO流--PrintWriter类

时间:2023-11-10 12:36:48浏览次数:41  
标签:PrintWriter pw -- BufferedWriter print new JavaSE txt



文章目录

  • 1.常用的构造方法
  • 2.常用方法
  • 3.PrintWriter和BufferedWriter的使用区别



java.io.PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据。可以理解为java中的文件输出,java中的文件输入则是java.io.File。

1.常用的构造方法

1)构造方法参数为String类型的对象,值应为文件全路径。若文件不存在,则会先创建文件。

public PrintWriter(String fileName) throws FileNotFoundException {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),
          false);
 }

代码示例

举例:若aaa.txt不存在,则先创建aaa.txt,再向aaa.txt中写入“Hello World”。若aaa.txt存在,则直接向aaa.txt中写入“Hello World”(每次写入的内容都会覆盖原来的内容)。

public static void main(String[] args)  {
        PrintWriter pw = null;
        try {
            pw = new PrintWriter("aaa.txt");
            pw.print("Hello World");
            pw.print("Hello World");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            pw.close();
        }
    }

2)构造方法参数为File类型的对象,值应为File。

public PrintWriter(File file) throws FileNotFoundException {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
          false);
 }
public static void main(String[] args) {
        File file = new File("ccc.txt");
        System.out.println(file.exists());//输出为false,因为本地没有ccc.txt
        PrintWriter pw = null;
        try {
            pw = new PrintWriter(file);//先创建ccc.txt(若存在,则不会创建)
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        pw.print("Hello World");
        pw.print("Hello World");
        pw.print("Hello World");
        pw.close();
    }

3)构造方法参数为FileWriter

public PrintWriter (Writer out) {
       this(out, false);
   }

示例:

public static void main(String[] args) {
    File file = new File("ccc.txt");
    System.out.println(file.exists());//输出为false,因为本地没有ccc.txt
    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new FileWriter(file,true));//先创建ccc.txt(若存在,则不会创建)
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    pw.println("Hello World");
    pw.println("Hello World");
    pw.println("Hello World");
    pw.close();
}

2.常用方法

(1)print(String str):向文件写入一个字符串。
(2)print(char[] ch):向文件写入一个字符数组。
(3)print(char c):向文件写入一个字符。
(4)print(int i):向文件写入一个int型值。
(5)print(long l):向文件写入一个long型值。
(6)print(float f):向文件写入一个float型值。
(7)print(double d):向文件写入一个double型值。
(8)print(boolean b):向文件写入一个boolean型值。

3.PrintWriter和BufferedWriter的使用区别

BufferedWriter:将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入。通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作。BufferedWriter中的字符流必须通过调用flush方法才能将其刷出去。并且BufferedWriter只能对字符流进行操作。如果要对字节流操作,则使用BufferedInputStream。

PrintWriter:向文本输出流打印对象的格式化表示形式(Prints formatted representations of objects to a text-output stream)。PrintWriter相对于BufferedWriter的好处在于,如果PrintWriter开启了自动刷新,那么当PrintWriter调用println,输出流中的数据就会自动刷新出去。PrintWriter不但能接收字符流,也能接收字节流。

Socket编程中,尽量用PrintWriter取代BufferedWriter,下面是PrintWriter的优点:

1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;
2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;
3. PrintWriter的方法不会抛异常,BufferedWriter方法需要处理异常;
4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);
5. PrintWriter的构造方法更广。

小结:
在使用BufferedReader中的readLine方法接收BufferedWriter中的字符流时,由于readLine是在读取到换行符的时候才将整行字符返回,所以BufferedWriter方法在录入一段字符后要使用newLine方法进行一次换行操作,然后再把字符流刷出去。而PrintWriter由于可以开启自动刷新,并且其中的println方法自带换行操作。所以代码实现起来要比BufferedWriter简单一些。


标签:PrintWriter,pw,--,BufferedWriter,print,new,JavaSE,txt
From: https://blog.51cto.com/xiongmaoit/8295547

相关文章

  • Electron学习2 使用Electron-vue和Vuetify UI库
    Electron学习2使用Electron-vue和VuetifyUI库一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1.关于electron-builder2.安装脚手架3.运行4.打包应用程序四、background.js说明1.引入模块和依赖:2.注册协议:3.创建窗口函数:4.生命周期事件和监听器:五、使用UI库......
  • 剑指 Offer 66. 构建乘积数组
    文章目录题目描述思路分析完整代码题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B[i]的值是数组A中除了下标i以外的元素的积,即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。思路分析将所有的数都乘起来得到一个总乘积,然后求......
  • Electron学习3 使用serialport操作串口
    Electron学习3使用serialport操作串口一、准备工作二、SerialPort介绍1.核心软件包(1)serialport(2)@serialport/stream(3)@serialport/bindings-cpp(4)@serialport/binding-mock(5)@serialport/bindings-interface2.解析器包3.命令行工具三、创建一个demo程序1.创建......
  • redis 6个节点(3主3从),始终一个节点不能启动
    redis节点,始终有一个节点不能启动起来1.修改了配置文件protected-modeno,重启修改了配置文件protected-modeno,重启redis问题依然存在2、查看/var/log/message的redis日志Aug2107:40:33redisMasterkernel:Outofmemory:Killprocess31814(redis-server)score193ors......
  • 基于Resources Saver 下载网页信息
    1.打开Chrome应用商店https://chrome.google.com/webstore/search/resources%20saver?utm_source=ext_app_menu&_category=extensions 2.搜索 ResourcesSaver点进去 【添加至Chrome】3.打开浏览器控制台找到  ResourcesSaver菜单栏点击SaveAll  Resources 即可......
  • uri
    urii指的是id。定长无分割版本ar:[1,2]#省:[3,4]#市[5,6]#brith:[7,8,9,10,11,12,13,14,15]#生日cs:[16]#校验码140502199908312218可能会重每天999个新生号码分隔符14/05/02/19990831/221/8不会重复,但是存储太大。层级系统生成(身份证)放号自选(车牌号)......
  • 【视频课】纯新手如何快速掌握深度学习必备的Python基础能力,150分钟助你入门!...
    前言欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下:第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用。第2层:掌握CV算法最底层的能力,包括模型设计基础,图像分类,模型分析。第3层:掌握CV算法最核心的方向,包括图像分......
  • 言有三新书出版,《深度学习之图像识别(全彩版)》上市发行,配套超详细的原理讲解与丰富的实
    各位同学,今天有三来发布新书了,名为《深度学习之图像识别:核心算法与实战案例(全彩版)》,本次书籍为我写作并出版的第6本书籍。前言2019年5月份我写作了《深度学习之图像识别:核心技术与案例实战》,迄今已经重印5次,被众多读者所认可。可见如下:言有三新书预售,不贵,有料2019年版(全黑白印刷,正......
  • 静态代码分析工具Helix QAC 2023.3:将100%覆盖MISRA C++2023规则
    静态代码分析工具HelixQAC2023.3:将100%覆盖MISRAC++:2023®规则 HelixQAC2023.3预计将于2023年第四季度发布的新MISRAC++®指南,将100%覆盖MISRAC++:2023®规则。 此外,此版本扩展了对C++20语言支持,并改进了PerforceValidate平台和HelixQAC与Validate的集成,包括其他......
  • 无涯教程-批处理 - Moving Files函数
    对于移动文件,批处理脚本提供了MOVE命令。MOVE[/Y|/-Y][drive:][path]filename1[,...]destination以下是可以提供给DEL命令的选项的说明。S.No.Options&描述1.[drive:][path]filename1指定要移动的文件的位置和名称2.destination指定文件的新位置,目标可以由......