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++];
}
}
}