------- android培训、java培训、期待与您交流! ----------
今天回顾了IO流中SequenceInputStream InputStream的子类
它可以将多个读取流合并成一个读取流
import java.io.*;
import java.util.*;
public class SequenceInputStreamDemo
{
public static void main(String[] args)throws IOException
{
//查阅API发现已经过时的Vector集合符合条件
Vector<FileInputStream> v = new Vector<FileInputStream>();
//定义一些准备合并的读取流
v.add(new FileInputStream("f:\\java\\java\\1.txt"));
v.add(new FileInputStream("f:\\java\\java\\2.txt"));
v.add(new FileInputStream("f:\\java\\java\\3.txt"));
Enumeration<FileInputStream> en = v.elements();
//构造SequenceInputStream需要传入一个Enumeration对象
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("F:\\java\\java\\4.txt");
byte [] buf = new byte[1024];
int len = 0;
//sis对象也就是SequenceInputStreams是InputStream的子类所以继承read方法
while((len = sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}
另外毕老师还介绍了另一种收集FIleInputStream对象的方式,并连同切割文件一起演示
自己在熟练代码后,将自己的理解将注释加入代码中,加深印象
package com.IOANOTHER;
import java.io.*;
import java.util.*;
//切割一个文件
public class SplitFileDemo
{
public static void main(String[] args) throws IOException
{
splitFile();
}
public static void splitFile()throws IOException
{
//建立需要切个文件的读取流对象
FileInputStream fis = new FileInputStream("f:\\java\\java\\1.bmp");
//声明输出流对象
FileOutputStream fos = null;
//循环读取流
byte [] buf = new byte[1024];
int len = 0 ;
int count = 1;
while((len= fis.read(buf))!=-1)
{
//每次读到一兆建立一个新的输出流对象关联一个目的文件
fos = new FileOutputStream("f:\\java\\"+(count +=1)+".part");
fos.write(buf,0,len);
fos.close();
}
fis.close();
}
public static void merge()throws IOException
{
/*Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("f:\\java\\1.part"));
v.add(new FileInputStream("f:\\java\\2.part"));
v.add(new FileInputStream("f:\\java\\3.part"));
Enumeration<FileInputStream> en = v.elements();
*/
//用ArrayList收集FileInputStream流
ArrayList<FileInputStream> arr = new ArrayList<FileInputStream>();
//定义循环将需要的FileInputStream流遍历进入集合
for(int x=0;x<=3;x++)
{
arr.add(new FileInputStream("F:\\java\\"+x+".part"));
}
//利用Iterator的对象it获取Enumeration对象
final Iterator<FileInputStream> it = arr.iterator();
Enumeration<FileInputStream>en = new Enumeration<FileInputStream>()
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
//构造SequenceInputStream传入Enumeration对象
SequenceInputStream sis = new SequenceInputStream(en);
//定义FileOutputStream对象关联目标文件
FileOutputStream fos = new FileOutputStream("f:\\java\\2.bmp");
byte [] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1) //sis对象读取出来的数据存入数组
{
fos.write(buf,0,len); //存满1024就写入fos目标关联文件
}
fos.close();
sis.close();
}
}
本文详细探讨了SequenceInputStream的使用方法及其在文件合并中的应用,并通过实例展示了如何利用此技术将多个文件内容合并为一个。此外,文章还介绍了另一种文件切割方法,即通过循环读取流并建立新的输出流来实现文件的分割,同时提供了合并分割文件的代码示例。
1318

被折叠的 条评论
为什么被折叠?



