需求
读单词,要用字符流分别读出来两个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();
}
}
写完后别忘了关闭流…
只需要关闭最底层的缓冲流就能让上边的流一并关闭了…