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

在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法。
Files.newBufferedWriter(Java 8)Files.write(Java 7 推荐)PrintWriterFile.createNewFileFileOutputStream.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();
}
}
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
总结java中创建并写文件的5种方式的更多相关文章
- Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式: a. 加载classpath目录下的vm文件 /** * 初始化Velocity引擎 * --VelocityEngine是单例模式,线程安全 * @th ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- 转 Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式: 方式一:加载classpath目录下的vm文件 Prope ...
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- JAVA 中加载属性文件的4种方法
小总结 : 这个集合属性可以反序列化, 把持久化数据读出来, 输入流中放入要操作的文件! p.load加载这个输入流! p.getProperty( key) 根据这个键获得值! 补充 : web工程 ...
- Node.js写文件的三种方法
Node.js写文件的三种方式: 1.通过管道流写文件 采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐) var readStream = fs. ...
- 【练习】Java中的读文件,文件的创建,写文件
前言 大家好,给大家带来Java中的读文件,文件的创建,写文件的概述,希望你们喜欢 读文件 public static void read(String path,String filename){ ...
- Java中的读文件,文件的创建,写文件
前言 大家好,我是 Vic,今天给大家带来Java中的读文件,文件的创建,写文件的概述,希望你们喜欢 示意图 读文件 public static void read(String path,Strin ...
- Java中创建操作文件和文件夹的工具类
Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...
随机推荐
- PHP cosh() 函数
实例 返回不同数的双曲余弦: <?phpecho(cosh(3) . "<br>");echo(cosh(-3) . "<br>" ...
- MySQL主从同步-原理&实践篇
来源:Onegoleya 简栈文化 什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式,这样从节点 ...
- windows下使用redis命令行模式查询数据
背景:redis的火,就像java一样,对于测试人员来说,使用它就需要好好搞下,现在就整理下命令行模式,来查询获取自己想要的值: 命令行连接命令:redis-cli -h 主机名 -p 端口号 -a ...
- 041_go语言中的panic
代码演示: package main import "os" func main() { // panic("a problem") _, err := os. ...
- LinuX操作系统基础------>软件的安装方式,chmod权限,vi编辑器的使用
RPM包管理 -rpm命令管理 RPM包管理 -yum在线管理 文件权限管理 vi编辑器的使用和常用的快捷键 1.RPM包管理: 一种用于互联网下载包的打包及安装工具,RPM包管理分为rpm命令管理和 ...
- Unity 入门
- Docker初探之运行MySQL
在实际的开发中使用MySQL的也不少,如果要想在Docker中使用MySQL,那么第一步就需要拉取MySQL镜像. 一.拉取MySQL镜像 命令: docker pull mysql 如图: 拉取的是 ...
- git使用-git仓库
1.初始化版本库 git init 2.添加文件到版本库 git add git commit 3.查看仓库状态 git status 4.撤销初始化命令 rm -rf .git
- Cross-Stage-Partial-Connections
- 【JAVA】java中int转成String位数不足前面补零例如:1->001
String.format("%03d", 1); 0代表前面要补的字符3代表字符串长度d表示参数为整数类型 测试完数据:循环了100次 截取了一部分: