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();
        }
    }
}

 

posted @ 2022-06-09 14:44  残城碎梦  阅读(599)  评论(0编辑  收藏  举报