本帖最后由 一生一世 于 2012-6-26 12:37 编辑
/*
合并流
SequenceInputStream
视频在day20-16合并流
*/
import java.io.*;
import java.util.*;
class SequenceStreamDemo1
{
public static void main(String[] args) throws Exception
{
SequenceStreamDemo1 ss = new SequenceStreamDemo1();
ss.mergeFile();
}
public void mergeFile() throws Exception{
Vector<FileInputStream> v = new Vector<FileInputStream>();
/*这里我的3个文件,写到最后一行比如"111"的时候,
光标停留在1后面,而没有停留在111的下面,也就是说在文本中没有将光标换行
结果输出的时候,请看结果1
而将光标换行的话,请看结果2,这个和毕老师的视频中是一样的
我的问题就是,如何让每个文本"1.txt","2.txt","3.txt"在读完最后一行时进行判断,
如果换行了就不操作,没有换行,就给他换行
*/
/* v.add(new FileInputStream("E:\\1.txt"));
v.add(new FileInputStream("E:\\2.txt"));
v.add(new FileInputStream("E:\\3.txt"));*/
// FileInputStream read1 = new FileInputStream("E:\\1.txt");
// FileOutputStream fos1 = new FileOutputStream("E:\\1.txt");
String[] path = {"E:\\1.txt","E:\\2.txt","E:\\3.txt"};
write(v,path);
Enumeration<FileInputStream> en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("E:\\4.txt");
byte[] b = new byte[1024];
int len = 0;
while ((len=sis.read(b))!=-1)
{
fos.write(b,0,len);
}
// fos.write(13);
//fos.write(10);
sis.close();
fos.close();
}
private void write(Vector<FileInputStream> v, String[] path) throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
for(int i=0; i<v.size() ;i++){
fis = new FileInputStream(path);
fos = new FileOutputStream(path);
int b;//这是为了读取文件的最后一个字节
while(true){
b = fis.read();
if(b==-1)
break;
}
byte[] buf = new byte[1024];
int len;
while((len=fis.read(buf))!=-1){
if(!(buf[b-2]==13 && buf[b-1]==10)){
buf=13;//这是在添加换行符/r/n
buf[b+1]=10;
}
fos.write(buf, 0, len);
}
}
}
}
|