展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

追加内容到指定文件的最前面

  • 代码案例
import java.io.*;

public class test {

    public static void main(String[] args) throws IOException {
        // 追加如下内容
        String writeContext = "SET NAMES utf8mb4;\n" +
                              "SET FOREIGN_KEY_CHECKS = 0;\n" +
                              "\n";
        // 目标文件夹
        String path = "C:\\work\\git\\test";
        // 从指定位置开始追加
        int deep = 0;
        // 获得指定文件对象
        File file = new File(path);
        // 获得该文件夹内的所有文件的名称
        File[] array = file.listFiles();
        for(int i=0;i<array.length;i++)
        {
            if(array[i].isFile())//如果是文件
            {
                for (int j = 0; j < deep; j++)//输出前置空格
                    System.out.print(" ");
                // 拼接出要修改的文件路径
                String txtFilePath = "C:\\work\\git\\test\\" + array[i].getName();
                System.out.println(txtFilePath);
                // 开始追加
                addContainsToFile(txtFilePath, 0, writeContext);
            }
        }
    }

    public static void addContainsToFile(String filePath, int position, String contents) throws IOException {
        //1、参数校验
        File file = new File(filePath);
        System.out.println(file);
        //判断文件是否存在
        if (!(file.exists() && file.isFile())) {
            System.out.println("文件不存在  ~ ");
            return;
        }
        //判断position是否合法
        if ((position < 0) || (position > file.length())) {
            System.out.println("position不合法 ~ ");
            return;
        }
        //2、创建临时文件
        File tempFile = File.createTempFile("sss", ".temp", new File("C:/work"));
        //3、用文件输入流、文件输出流对文件进行操作
        FileOutputStream outputStream = new FileOutputStream(tempFile);
        FileInputStream inputStream = new FileInputStream(tempFile);
        //在退出JVM退出时自动删除
        tempFile.deleteOnExit();
        //4、创建RandomAccessFile流
        RandomAccessFile rw = new RandomAccessFile(file, "rw");
        //文件指定位置到 position
        rw.seek(position);
        int tmp;
        //5、将position位置后的内容写入临时文件
        while ((tmp = rw.read()) != -1) {
            outputStream.write(tmp);
        }
        //6、将追加内容 contents 写入 position 位置
        rw.seek(position);
        rw.write(contents.getBytes());
        //7、将临时文件写回文件,并将创建的流关闭
        while ((tmp = inputStream.read()) != -1) {
            rw.write(tmp);
        }
        rw.close();
        outputStream.close();
        inputStream.close();
    }

}
posted @ 2022-11-09 15:47  DogLeftover  阅读(83)  评论(0编辑  收藏  举报