Java -- 对一个文件的任意位置可以插入任何内容

题目:提供一个文件操作的方法,其需要实现功能:对一个文件的任意位置可以插入任何内容
提供一个文件操作的方法,其需要实现功能:对一个文件的任意位置可以插入任何内容
@param filePath:文件路径
@param postion:追加内容添加位置
@param contents:追加内容
public static void addContentsToFile(String filePath, int postion, String contents) {

}

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("d:/"));
        //File tempFile = new File("d:/wwwww.txt");
        //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();

测试:

String filePath = ("hehe.txt");
        //File file = new File("hehe.txt");
        String contents = new String("abc");
        try {
            addContainsToFile(filePath,3,contents);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

执行前:

这里写图片描述

执行后:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/xyxy66/article/details/81412410