Java创建文件及写文件
示例代码:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
/**
* 创建文件并写内容
*/
@RestController
@RequestMapping("/fileOperator")
public class FileOperatorController {
/**
* 方式一:Files.newBufferedWriter(Java 8)
* java8 提供的newBufferedWriter可以创建文件,并向文件内写入数据。可以通过追加写模式,向文件内追加内容
*/
@RequestMapping("/createFile1")
public void createFile1() throws IOException {
//目录不存在则创建
String uploadPath = "D:/javatest/createFile1/";
File directory = new File(uploadPath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileName = uploadPath + "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 -字母哥!!");
}
}
/**
* 方式二:Files.write(Java 7 推荐)
* 语法简单,而且底层是使用Java NIO实现的。同样提供追加写模式向已经存在的文件种追加数据。这种方式是实现文本文件简单读写最方便快捷的方式。
*/
@RequestMapping("/createFile2")
public void createFile2() throws IOException {
//目录不存在则创建
String uploadPath = "D:/javatest/createFile2/";
File directory = new File(uploadPath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileName = uploadPath + "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);
}
/**
* 方式三:PrintWriter
* PrintWriter是一个比较古老的文件创建及写入方式,从JDK1.5就已经存在了,比较有特点的是:PrintWriter的println方法,可以实现一行一行的写文件。
*/
@RequestMapping("/createFile3")
public void createFile3() throws FileNotFoundException, UnsupportedEncodingException {
//目录不存在则创建
String uploadPath = "D:/javatest/createFile3/";
File directory = new File(uploadPath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileName = uploadPath + "newFile3.txt";
// JSD 1.5开始就已经存在的方法
try (PrintWriter writer = new PrintWriter(fileName, "UTF-8")) {
writer.println("Hello World -创建文件!!");
writer.println("Hello World -字母哥!!");
}
}
/**
* 方式四:File.createNewFile
* createNewFile()方法的功能相对就比较纯粹,只是创建文件不做文件写入操作。
* 返回true表示文件成功,返回 false表示文件已经存在.可以配合FileWriter 来完成文件的写操作
*/
@RequestMapping("/createFile4")
public void createFile4() throws IOException {
//目录不存在则创建
String uploadPath = "D:/javatest/createFile4/";
File directory = new File(uploadPath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileName = uploadPath + "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 -创建文件!!");
}
}
/**
* 方式五:FileOutputStream.write(byte[] b) 管道流
* 最原始的方式就是使用管道流嵌套的方法,但是笔者觉得这种方法历久弥新,使用起来非常灵活。
* 你想去加上Buffer缓冲,你就嵌套一个BufferedWriter,你想去向文件中写java对象你就嵌套一个ObjectOutputStream。但归根结底要用到FileOutputStream。
*/
@RequestMapping("/createFile5")
public void createFile5() throws IOException {
//目录不存在则创建
String uploadPath = "D:/javatest/createFile5/";
File directory = new File(uploadPath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileName = uploadPath + "newFile5.txt";
try (FileOutputStream fos = new FileOutputStream(fileName);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);) {
bw.write("Hello World -创建文件!!");
bw.flush();
//bw.close();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现