[code]package cn.itcast.io.spilt.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
/**
* 将3个文件合并成一个 原理:创建3个流对象,关联3个文件,然后将里存储集合 然后将集合作为参数传递给合并流sepuenceInputStream的构造函数
注:1.txt文件中都是字母 a
2.txt中都是 b
3.txt中都是 c
步骤:1,创建集合存储流对象 2.将集合传递给合并 3.将文件写入指定的文件中
* @author jinxiao
*/
在下列代码中,使用红色标记的 字符输出流,合并后的文件中为什么结果是====》 mmm
如果使用字节输出流就是 OK的
public class MergeFielDemo {
private static final int BUFFER_SIZE = 1024*1024;
public static void main(String[] args) throws IOException {
File file = new File("merge.txt");
// 创建一个集合用于存储流对象
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
al.add(new FileInputStream("1.txt"));
al.add(new FileInputStream("2.txt"));
al.add(new FileInputStream("3.txt"));
mergeDemo(al,file);
}
private static void mergeDemo(ArrayList<FileInputStream> al, File file) throws IOException {
// 将list集合中的元素转换成枚举方法取出
final Iterator<FileInputStream> it = al.iterator(); // 局部内部类使用的变量需要final进行修饰
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
return it.next();
}
};
//将流合并
SequenceInputStream sis = new SequenceInputStream(en);
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
// FileOutputStream fos = new FileOutputStream(file);
//自定义一个缓冲区
byte[] buf = new byte[BUFFER_SIZE];
int len = 0;
while((len = sis.read(buf))!=-1)
{
bufw.write(len);
// fos.write(buf,0,len);
}
sis.close();
bufw.close();
// fos.close();
}
}
|
|