Java 文件内容合并

最近看到一道面试题,题目是这样描述的:

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

由于本人对于文件的读写并不熟悉,所以,亲自写了一遍,就算是笔记,当然,也方便大家学习交流.

package com.darren.test.file;

import java.io.FileWriter;
import java.io.IOException;

public class MergeFileTest {

    public static void main(String[] args) {
        FileManager aFile = new FileManager("D:/a.txt", new char[]{'\n'});
        FileManager bFile = new FileManager("D:/b.txt", new char[]{'\n',' '});
        
        try {
            FileWriter writer = new FileWriter("D:/c.txt");
            String aWord = null;
            String bWord = null;
            //注:使用两个while循环,防止b.txt的内容比a.txt的文件内容多
            while((aWord = aFile.nextWord()) != null){
                writer.write(aWord);
                writer.write("\n");
                
                bWord = bFile.nextWord();
                if(bWord != null){
                    writer.write(bWord);
                    writer.write("\n");
                }
            }
            
            while((bWord = bFile.nextWord()) != null){
                writer.write(bWord);
                writer.write("\n");
            }
            writer.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

package com.darren.test.file;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileManager {
    /**
     * 单词数组
     */
    private String[] words;
    
    /**
     * 单词索引值
     */
    private int index = 0;
    
    /**
     * 文件管理器
     * @param fileName 文件名
     * @param separator 分隔符
     */
    public FileManager(String fileName, char[] separator){
        String result = "";
        try {
            File file = new File(fileName);
            FileReader reader = new FileReader(file);
            char[] buff = new char[(int) file.length()];
            try {
                int length = reader.read(buff);
                result = new String(buff, 0, length);
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            String regex = null;
            int size = separator.length;
            //拼出正则表达式
            for(int i = 0; i < size; i++){
                regex = "" + separator[i] + "|";
            }
            //去掉最后一位"|"符号
            if(size > 0){
                regex = regex.substring(0, regex.length() - 1);
            }
            words = result.split(regex);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 读单词
     * @return 
     */
    public String nextWord(){
        if(index == words.length){
            return null;
        }else{
            return words[index++];
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值