java io实例一:将2个文件中的内容写入一个新的文件中

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

2思路:
定义一个FileManager类,生产对象时将文件中的单词放入到一个数组中,封装在这个对象中,以供之后调用。

3在写实例之前先对File FileReader FileWriter 进行简单的介绍

3.1File
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 ,几乎包含了对文件的所有操作(包括文件夹)详解可参考其api:http://www.runoob.com/java/java-file.html
3.2FileReader
FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过构造方法创建需要的对象。 详解可参考其api:http://www.runoob.com/java/java-filereader.html
3.3FileWriter
FileWriter类从OutputStreamReader类继承而来。该类按字符向流中写入数据。可以通过构造方法创建需要的对象。
详解可参考其api:http://www.runoob.com/java/java-filewriter.html

4实例:

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

/**
 * Created by maojiancai on 16/11/4.
 * 将a.text中的单词 与b.txt中的单词交替合并到c.txt
 * a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。
 *
 *
 * 解答思路:
 *        1定义一个FileManager类 用于读取文件中的单词
 */
public class Test1 {
    public static void main(String[] args) throws Exception{
        FileManager a = new FileManager("/Users/maojiancai/Desktop/io/a.txt",new char[]{'\n'});
        FileManager b= new FileManager("/Users/maojiancai/Desktop/io/b.txt",new char[]{'\n',' '});
        FileWriter c = new FileWriter("/Users/maojiancai/Desktop/io/c.txt");

        String aWord = null;
        String bWord = null;

        while ((aWord = a.nextWord())!=null){
            c.write(aWord+"\n");
            bWord = b.nextWord();
            if(bWord!=null){
                c.write(bWord+"\n");
            }
        }

        //上一个方法是确保a文件的单词写完,但是不确保b文件的单词也写完了,所以还要再继续写
        while((bWord=b.nextWord())!=null){
            c.write(bWord+"\n");
        }

        //最后不要忘记close 释放锁
        c.close();

    }
}


class FileManager{

    String[] words = null;

    int pos = 0;


    public FileManager(String pathe,char[] seperators)throws Exception{
        File f = new File(pathe);//传入文件路径,new File 对象
        FileReader reader = new FileReader(f);//new FileReder对象,获取文件内容
        char[] buf= new char[(int)f.length()];//length()方法获取文件的长度
        int len = reader.read(buf);//将读取到的字符写入buf,并返回长度
        String results = new String (buf,0,len);//   通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
        String regex = null;

        //获取拆分单词的方式
        if(seperators.length>1){
            regex ="" +seperators[0] +"|"+seperators[1];
        }else{
            regex=""+seperators[0];
        }

        //最后将单词拆分到words数组中
        words=results.split(regex);
    }

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

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值