IO文件读写

将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到txt文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔

需求

单词,要用字符流分别读出来两个txt文件,再写入到c.txt文件中

思想

把两个文件中的单词分别用readLine()方法读取出来,然后按照" "空格划分split进两个String数组,如果要将两个文件的单词交替写入c.txt,就需要将数组里的每一个单词放进一个集合中,然后用集合取数据来交替写入。

如何把数组放进集合

可以调用Arrays工具类里的asList()方法将数组变成集合,再调用List集合的中的addAll(Connection集合)来将数组里的单词全部放入到List集合中

具体代码如下:

package io;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReaderFileDemo {
    public static void main(String[] args) throws IOException {

        //读txt文件
        //1.先建字节流,读取文件路径
        //2.建字符流放入字节流
        //3.建缓冲字符流
        FileInputStream fis1 = new FileInputStream("a.txt");
        InputStreamReader isr1 = new InputStreamReader(fis1);
        BufferedReader br1 = new BufferedReader(isr1);

        FileInputStream fis2 = new FileInputStream("b.txt");
        InputStreamReader isr2 = new InputStreamReader(fis2);
        BufferedReader br2 = new BufferedReader(isr2);


        String str1;
        List<String> letters1 = new ArrayList<>();
        while((str1 = br1.readLine())!=null){
            String[] words = str1.split(" ");
            letters1.addAll(Arrays.asList(words));
        }
        br1.close();

        String str2;
        List<String> letters2 = new ArrayList<>();
        while((str2 = br2.readLine())!=null){
            String[] words = str2.split(" ");
            letters2.addAll(Arrays.asList(words));
        }
        br2.close();

        //写入c.txt文件
        //比较两个文件的大小,在此我是按照大的文件为根据来写,超过小文件的大小即只写大文件即可
        int len1 = letters1.size();
        int len2 = letters2.size();
        FileOutputStream fos = new FileOutputStream("c.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        PrintWriter pw = new PrintWriter(osw,true);

        if(len1>len2){
            for (int i = 0; i < len1; i++) {
                if(i >= len2){
                    pw.println(letters1.get(i));
                }else{
                    pw.println(letters1.get(i));
                    pw.println(letters2.get(i));
                }
            }
        }else if (len1 < len2){
            for (int i = 0; i < len2; i++) {
                if(i >= len1){
                    pw.print(letters2.get(i));
                }else{
                    pw.print(letters2.get(i));
                    pw.print(letters1.get(i));
                }
            }
        }
        pw.close();
    }
}

写完后别忘了关闭流…
只需要关闭最底层的缓冲流就能让上边的流一并关闭了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值