百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

总结java中创建并写文件的5种方式

bigegpt 2024-09-02 16:33 3 浏览

在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法。

  1. Files.newBufferedWriter(Java 8)
  2. Files.write(Java 7 推荐)
  3. PrintWriter
  4. File.createNewFile
  5. FileOutputStream.write(byte[] b) 管道流

实际上不只这5种,通过管道流的排列组合,其实有更多种,但是笔者总结的这五种可以说是最常用及最佳实践,

前提小知识

以前我在写技术文章涉及到“流关闭”、“连接关闭”的时候,经常有人留言:“还写技术文章,写个流都不知道close()”,这种留言我遇到过无数回! 在本文中大量的使用到了try-with-resources语法,这个语法真的是很久的了,但是的确还有小伙伴不知道(知道的小伙伴就略过吧)。我还是说一下,下文中的管道流不是我没close,是自动关闭close的。

 try(管道流、连接等实现了Closeable接口的类){
     //这里使用类对象操作
 }
 //用try()包含起来,就不用在finally里面自己手动的去 Object.close()了,会自动的关闭

1. Java 8 Files.newBufferedWriter

java8 提供的newBufferedWriter可以创建文件,并向文件内写入数据。可以通过追加写模式,向文件内追加内容。

 @Test
 void testCreateFile1() throws IOException {
    String fileName = "D:\\data\\test\\newFile.txt";
 
    Path path = Paths.get(fileName);
    // 使用newBufferedWriter创建文件并写文件
    // 这里使用了try-with-resources方法来关闭流,不用手动关闭
    try (BufferedWriter writer =
                    Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
       writer.write("Hello World -创建文件!!");
    }
 ?
    //追加写模式
    try (BufferedWriter writer =
                 Files.newBufferedWriter(path,
                         StandardCharsets.UTF_8,
                         StandardOpenOption.APPEND)){
        writer.write("Hello World -字母哥!!");
    }
 }

2. Java 7 Files.write

下面的这种方式Files.write,是笔者推荐的方式,语法简单,而且底层是使用Java NIO实现的。同样提供追加写模式向已经存在的文件种追加数据。这种方式是实现文本文件简单读写最方便快捷的方式。

 @Test
 void testCreateFile2() throws IOException {
    String fileName = "D:\\data\\test\\newFile2.txt";
 ?
    // 从JDK1.7开始提供的方法
    // 使用Files.write创建一个文件并写入
    Files.write(Paths.get(fileName),
                "Hello World -创建文件!!".getBytes(StandardCharsets.UTF_8));
 ?
    // 追加写模式
    Files.write(
          Paths.get(fileName),
          "Hello World -字母哥!!".getBytes(StandardCharsets.UTF_8),
          StandardOpenOption.APPEND);
 }

3. PrintWriter

PrintWriter是一个比较古老的文件创建及写入方式,从JDK1.5就已经存在了,比较有特点的是:PrintWriter的println方法,可以实现一行一行的写文件。

 @Test
 void testCreateFile3() throws IOException {
    String fileName = "D:\\data\\test\\newFile3.txt";
 ?
    // JSD 1.5开始就已经存在的方法
    try (PrintWriter writer = new PrintWriter(fileName, "UTF-8")) {
       writer.println("Hello World -创建文件!!");
       writer.println("Hello World -字母哥!!");
    }
 ?
    // Java 10进行了改进,支持使用StandardCharsets指定字符集
    /*try (PrintWriter writer = new PrintWriter(fileName, StandardCharsets.UTF_8)) {
 ?
       writer.println("first line!");
       writer.println("second line!");
 ?
    } */
 ?
 }

4. File.createNewFile()

createNewFile()方法的功能相对就比较纯粹,只是创建文件不做文件写入操作。 返回true表示文件成功,返回 false表示文件已经存在.可以配合FileWriter 来完成文件的写操作。

 @Test
 void testCreateFile4() throws IOException {
    String fileName = "D:\\data\\test\\newFile4.txt";
 ?
    File file = new File(fileName);
 ?
    // 返回true表示文件成功
    // false 表示文件已经存在
    if (file.createNewFile()) {
       System.out.println("创建文件成功!");
    } else {
       System.out.println("文件已经存在不需要重复创建");
    }
 ?
    // 使用FileWriter写文件
    try (FileWriter writer = new FileWriter(file)) {
       writer.write("Hello World -创建文件!!");
    }
 ?
 }

5.最原始的管道流方法

最原始的方式就是使用管道流嵌套的方法,但是笔者觉得这种方法历久弥新,使用起来非常灵活。你想去加上Buffer缓冲,你就嵌套一个BufferedWriter,你想去向文件中写java对象你就嵌套一个ObjectOutputStream。但归根结底要用到FileOutputStream。

 @Test
 void testCreateFile5() throws IOException {
    String fileName = "D:\\data\\test\\newFile5.txt";
    try(FileOutputStream fos = new FileOutputStream(fileName);
       OutputStreamWriter osw = new OutputStreamWriter(fos);
       BufferedWriter bw = new BufferedWriter(osw);){
       bw.write("Hello World -创建文件!!");
       bw.flush();
    }
 }

感谢大家的阅读,最后小编自己整理了20G大厂的面试题、面试经验以及简历模板和进阶视频,需要的小伙伴私信回复【面试资料】获取!



相关推荐

一条命令搞定pip国内镜像源设置(pip install 指定镜像)

玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,不过默认pytho...

Cadence Allegro在PCB中手动或者自动添加差分对属性

设计PCB过程中,若设计中有差分对信号,则需要将是差分的2个信号设置为差分对,设置差分对有2种方式:手动添加及自动添加一、手动添加差分对:1、点击Setup-Constraints-Constrain...

合亿 Gutab 三防|车载工业平板功能介绍,车载工业平板厂家推荐

在商用车队管理迈向智能化、特种车辆作业追求高效化的今天,车载工业平板早已突破传统“车载导航”的单一功能,成为连接车辆、司机与云端管理的核心枢纽。从物流运输的实时调度中枢,到矿山开采的无人驾驶控制器,再...

「探长分享-黑匣子」本田冠道 2020款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】本田冠道2020款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步标...

「探长分享-黑匣子」奥迪A6L 2019款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】奥迪A6L2019款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步...

探长360全景案例分享:奥迪Q7 2011款360全景效果展示

【品牌】DCT360汽车黑匣子【产品型号】3TPro【安装车型】奥迪Q72011款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停...

「探长分享-黑匣子」保时捷Cayenne 2015款

【品牌】探长360汽车黑匣子【产品型号】4TPro【安装车型】保时捷Cayenne2015款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,...

苍蝇再小也是肉,变态电路的大阳巧客S2差点难死大神

这台大阳巧客S2电动四轮车是我家第二台四轮俱全的篷车!哈哈!大阳巧客S2配置4.5Kw永磁同步电机,SVPWM矢量控制正弦波系统,车辆在加速、爬坡上性能有提升,效率高,操控灵敏。这台车前段时间刚更换了...

「探长分享-黑匣子」奥迪Q5L 2020款

360汽车黑匣子【产品型号】4TPro【安装车型】奥迪Q5L2020款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停车监控,一秒一...

「探长分享-黑匣子」丰田兰德酷路泽 2016款

【品牌】探长360汽车黑匣子【产品型号】3TPro【安装车型】丰田兰德酷路泽2016款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小...

驾驶室盲区是酿成重卡事故主因?后视系统:这个锅我不背

小时候家中长辈常常提醒:离大货车远一点!司机根本看不到你!早期的货车可能真的存在驾驶盲区,比如车辆正下方,因驾驶座过高,恰好是司机看不到的视野盲区。而如今的重卡在环视系统上已经非常完善,是否还存在驾驶...

前后双录,360 G580行车记录仪(360行车记录仪g580s)

相信每一位车主都会为爱车安装行车记录仪,行车记录仪的作用不仅能为交通事故还原证据,还能防止碰瓷。传统的单镜头行车记录仪只能拍摄车头方向的行车画面,如果遇到后方车辆故意碰瓷的事故时,没有监控和后摄画面则...

海康威视同轴录像机怎么使用,海康XVR配置说明

海康威视同轴录像机支持模拟、同轴以及数字IP摄像机接入,因此在使用多种类型摄像机、老久监控项目改造等场景广泛使用。首先,新录像机第一次使用需要设置管理密码激活,密码需由8-16位数字、小写字母、大写...

亿道三防2代工业级车载平板电脑震撼登场,农机矿车专用

亿道三防近日推出2024年全新2代车载平板电脑V12R,引领多项技术创新和升级,为农机、矿车等车载领域带来了超越期待与想象的震撼体验。V12R是一款从里到外,性能、功能全线拉满的工业级车载平板电脑!拥...

分析神州十八号返回舱内的摄像机最有可能是什么类型的摄像头

有没有发现,神州十八号返回舱内摄像机的图像虽然清晰度不是很高,但是画面非常干净,没有一点干扰,几乎看不到噪点。图像清晰度不高不太可能是镜头原因,很可能是图像传感器的分辨率比较低的原因,图像传感器分辨率...