5、使用IO流实现文件内容交替合并

编程题目:

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

示例代码:

package program.stream.exercise05;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;

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

public class FileCombine {
    public static void main(String[] args) throws Exception {

        //注意:在java等编程语言中,反斜杠\具有转义的特殊作用,比如\t表示制表符,\n表示回车,
        //所以如果你想在字符串里使用\的本意,就要用双反斜杠,即\\才表示\
        //相对路径(Eclipse默认生成文件位于项目名下即路径写到src处)
        FileManager a = new FileManager("src\\program\\stream\\exercise05\\a.txt",new char[]{'\n'});
        FileManager b = new FileManager("src\\program\\stream\\exercise05\\b.txt",new char[]{'\n',' '});    
        Writer c = new FileWriter("src\\program\\stream\\exercise05\\c.txt");
        //绝对路径
        //FileWriter c = new FileWriter("D:\\Eclipse SE\\workspace\\Java Program\\src\\program\\stream\\exercise05\\c.txt");

        String aWord = null;
        String bWord = null;
        //a.txt和b.txt文件内容依次放入c.txt文件中
        while((aWord = a.nextWord()) != null ){
            c.write(aWord + "\n");//每个单词用回车符分隔
            if((bWord = b.nextWord()) != null){
                c.write(bWord + "\n");
            }
        }

        System.out.println("写入完成!");
        //关闭I/O流,不可少
        c.close();
    }

}

//文件管理类
class FileManager {

    private int index;//单词数组下标
    private String[] words;//单词数组

    public FileManager(String fileName,char[] seperators) throws Exception {

        File file = new File(fileName);
        Reader reader = new FileReader(file);
        char[] cs = new char[(int) file.length()];//定义一个字符数组,长度即是文件内容的长度
        int length = reader.read(cs);//有效字符数组长度
        String results = new String(cs,0,length);//将文件内容转换成字符串

        String regex = null;//分隔符
        if(seperators.length > 1 ){
            regex = "" + seperators[0] + "|" + seperators[1];//将分隔符转换成字符串,以便于分割
        }else{
            regex = "" + seperators[0];
        }
        words = results.split(regex);//将整个结果字符串分割成单词数组

        reader.close();

    }

    //获取下一个单词
    public String nextWord(){
        if(index == words.length){
            return null;
        }
        return words[index++];
    }

}

结果显示:

这里写图片描述
这里写图片描述
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值