文件操作—文件内容交换及追加

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件操作—文件内容交换及追加相关的知识,希望对你有一定的参考价值。

文件操作—文件内容交换及追加

- 文章开始前首先让我们先整理一下一些流的分类和特点

节点流和处理流

一、节点流类型

这里我们只讨论我们现在所面对的文件IO流
在这里插入图片描述
二、节点流执行的图示
在这里插入图片描述
(图片转载自网络)
File 文件流:对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。

三、处理流类型
在这里插入图片描述
四、处理流执行的图示
在这里插入图片描述
(图片转载自网络)
Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream

FileInputstream 读取数据效率一般不是特别高;是一个一个字节读取
BufferedInputStream读取数据高效;一个数组一个数组的读取

文件内容交换

在这里插入图片描述

“复制”操作代码实现

 BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        bis = new BufferedInputStream(new FileInputStream(file1));
        bos = new BufferedOutputStream(new FileOutputStream(file2));
        int length = 0;
        byte[] buf = new byte[1024];
        while ((length = bis.read(buf)) != -1) {
            bos.write(buf, 0, length);
        }

核心代码:

    byte[] buf = new byte[1024];
    while ((length = bis.read(buf)) != -1) {
        bos.write(buf, 0, length);
    }     
    将文件内容储存为字节型数组,进行输入和输出写入另一个文件中

完整代码

public class SwapFile {
    public static void main(String[] args) throws IOException {
        Scanner input =new Scanner(System.in);
        System.out.println("请输入你要交换内容的两个文件的路径:");
        String file1 = input.next();
        String file2 = input.next();
        String tempFile = "temp.txt";
        File temp = new File(tempFile);
        swapFile(file1,tempFile);
        swapFile(file2,file1);
        swapFile(tempFile,file2);
        System.out.println("-----已完成交换-----");
        temp.delete();
    }
    public static void swapFile(String file1,String file2) throws IOException{
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        bis = new BufferedInputStream(new FileInputStream(file1));
        bos = new BufferedOutputStream(new FileOutputStream(file2,true));
        int length = 0;
        byte[] buf = new byte[1024];
        while ((length = bis.read(buf)) != -1) {
            bos.write(buf, 0, length);
        }
        bos.close();
        bis.close();
    }
}

文件内容追加

public class AddFile {
    public static void main(String[] args) throws IOException {
        Scanner input =new Scanner(System.in);
        System.out.println("请输入你要追加内容的两个文件(前者加入后者)的路径:");
        String file1 = input.next();
        String file2 = input.next();
        addFile(file1,file2);
        System.out.println("-----已完成追加-----");
    }
    public static void addFile(String file1,String file2) throws IOException{
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        bis = new BufferedInputStream(new FileInputStream(file1));
        bos = new BufferedOutputStream(new FileOutputStream(file2,true));
        int length = 0;
        byte[] buf = new byte[1024];
        while ((length = bis.read(buf)) != -1) {
            bos.write(buf, 0, length);
        }
        bos.close();
        bis.close();
    }
}

与上述文件内容交换十分类似并且要更加简单

bis = new BufferedInputStream(new FileInputStream(file1));
bos = new BufferedOutputStream(new FileOutputStream(file2,true));

file1的内容写入file2文件时设定appendtrue(默认为false)即可实现添加内容时不覆盖原有内容,而是在末尾补充内容。

以上是关于文件操作—文件内容交换及追加的主要内容,如果未能解决你的问题,请参考以下文章

C# 文件操作

jQuery的DOM操作

python 文件操作读写追加的区别

Python3 关于excel 文件格式xls之读取写入和追加

文件的读写,对文件内容追加操作

Python操作文件