package cn_xqx_01;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
/***
*
* @author xqx
*
* 文件隐藏功能
* 拆文件
* 1.读文件 fielinputstream
* 2.存入缓冲区
* 3.写文件 fileoutpurstream
* 4.刷新缓冲区,等待下一个文件进入
*
* 合文件
* 1.读刚刚被拆开的文件fileinoutstream(for循环读取)存入Arraylist集合
* 2.用迭代器Itertor取出文件
* 3.用枚举来重写hasnext与next方法
* 4.在用SequenceInputStream在读一遍枚举后的文件
* 5.用fileoutputstream来合并文件
*
*
*/
public class SplitFile {
public static void main(String[] args) throws IOException{
//SplitFile_01();//切割文件
sequence();//合并文件
}
public static void SplitFile_01() throws IOException{
FileInputStream fileInputStream = new FileInputStream("F:\\01.bmp");
FileOutputStream fileOutputStream = null;
int len = 0;
int count = 1;
byte[] b = new byte[5*1024*1024];//切割文件大小为5*1MB 被平均分割
while((len=fileInputStream.read(b))!=-1)
{
fileOutputStream = new FileOutputStream("F:\\"+(count++)+".part");//用计数器区别part文件
fileOutputStream.write(b,0,len);
fileOutputStream.close();//一个切割好了,就刷新缓冲区,等待第二个进入
}
if(fileInputStream!=null)
{
fileInputStream.close();
}
}
public static void sequence()throws IOException {
ArrayList<FileInputStream> arrayList = new ArrayList<FileInputStream>();
for(int x=1;x<=3;x++)
{
arrayList.add(new FileInputStream("F:\\"+x+".part"));
}
final Iterator<FileInputStream> iterator = arrayList.iterator();
//用枚举来重写迭代器
Enumeration<FileInputStream> enumeration = new Enumeration<FileInputStream>() {
public boolean hasMoreElements()
{
return iterator.hasNext();
}
public FileInputStream nextElement() {
return iterator.next();
}
};
SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration);
FileOutputStream fileOutputStream = new FileOutputStream("E:\\02.bmp");
int len = 0;
byte[] b = new byte[5*1024*1024];
while((len=sequenceInputStream.read(b))!=-1)
{
fileOutputStream.write(b,0,len);
}
if(sequenceInputStream!=null)
{
sequenceInputStream.close();
}
fileOutputStream.close();
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
/***
*
* @author xqx
*
* 文件隐藏功能
* 拆文件
* 1.读文件 fielinputstream
* 2.存入缓冲区
* 3.写文件 fileoutpurstream
* 4.刷新缓冲区,等待下一个文件进入
*
* 合文件
* 1.读刚刚被拆开的文件fileinoutstream(for循环读取)存入Arraylist集合
* 2.用迭代器Itertor取出文件
* 3.用枚举来重写hasnext与next方法
* 4.在用SequenceInputStream在读一遍枚举后的文件
* 5.用fileoutputstream来合并文件
*
*
*/
public class SplitFile {
public static void main(String[] args) throws IOException{
//SplitFile_01();//切割文件
sequence();//合并文件
}
public static void SplitFile_01() throws IOException{
FileInputStream fileInputStream = new FileInputStream("F:\\01.bmp");
FileOutputStream fileOutputStream = null;
int len = 0;
int count = 1;
byte[] b = new byte[5*1024*1024];//切割文件大小为5*1MB 被平均分割
while((len=fileInputStream.read(b))!=-1)
{
fileOutputStream = new FileOutputStream("F:\\"+(count++)+".part");//用计数器区别part文件
fileOutputStream.write(b,0,len);
fileOutputStream.close();//一个切割好了,就刷新缓冲区,等待第二个进入
}
if(fileInputStream!=null)
{
fileInputStream.close();
}
}
public static void sequence()throws IOException {
ArrayList<FileInputStream> arrayList = new ArrayList<FileInputStream>();
for(int x=1;x<=3;x++)
{
arrayList.add(new FileInputStream("F:\\"+x+".part"));
}
final Iterator<FileInputStream> iterator = arrayList.iterator();
//用枚举来重写迭代器
Enumeration<FileInputStream> enumeration = new Enumeration<FileInputStream>() {
public boolean hasMoreElements()
{
return iterator.hasNext();
}
public FileInputStream nextElement() {
return iterator.next();
}
};
SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration);
FileOutputStream fileOutputStream = new FileOutputStream("E:\\02.bmp");
int len = 0;
byte[] b = new byte[5*1024*1024];
while((len=sequenceInputStream.read(b))!=-1)
{
fileOutputStream.write(b,0,len);
}
if(sequenceInputStream!=null)
{
sequenceInputStream.close();
}
fileOutputStream.close();
}
}
小弟还搞不懂为什么在合并时 为什么要先Eumeration+SequenceInputSteam啊?不能直接FileOutputStram吗????