一个小demo,给朋友传大文件的时候传不过去的话,可以玩玩
//过滤文件目录
import java.io.File;
import java.io.FilenameFilter;
public class suffixFilter implements FilenameFilter {
private String suffix;
public suffixFilter(String suffix){
super();
this.suffix=suffix;
}
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
//分割文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class SplitFileDemo {
private static final int SIZE=1048576;
public static void main(String[] args) throws IOException {
File f=new File("F:\\硕鼠下载区\\百度音乐盒.mp3");//在这配置需要分割的文件
splitFile(f);
}
public static void splitFile(File file) throws IOException{
FileInputStream fis=new FileInputStream(file);
//1m的缓存区
byte[] buf= new byte[SIZE];
FileOutputStream fos=null;
int len=0;
int count=1;
Properties prop=new Properties();
File dir=new File("F:\\partfiless");
if(!dir.exists()){
dir.mkdirs();
}
while((len=fis.read(buf))!=-1){
fos=new FileOutputStream(new File(dir,(count++)+".part"));
fos.write(buf, 0, len);
fos.close();
}
prop.setProperty("partcount", count+"");
prop.setProperty("filename", file.getName());
fos=new FileOutputStream(new File(dir,(count++)+".properties"));
//配置文件保存
prop.store(fos,"ave file info");
fos.close();
fis.close();
}
}
//合并文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;
public class MergeFile {
/**
* @throws IOException
*
*/
public static void main(String[] args) throws IOException {
File dir = new File("F:\\partfiless");
mergeFile_2(dir);
}
private static void mergeFile_2(File dir) throws IOException {
File[] files=dir.listFiles(new suffixFilter(".properties"));
if(files.length!=1)
throw new RuntimeException(dir+"目录有问题");
//记录配置文件
File confile=files[0];
//获取文件对象
Properties prop=new Properties();
FileInputStream fis=new FileInputStream(confile);
prop.load(fis);
String filename=prop.getProperty("filename");
int count=Integer.parseInt( prop.getProperty("partcount"));
//获取碎片文件
File[] pareFiles=dir.listFiles(new suffixFilter(".part"));
if(pareFiles.length!=(count-1)){
throw new RuntimeException("碎片错误应有"+count);
}
//合并碎片集合
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for(int x=0;x<pareFiles.length;x++){
al.add(new FileInputStream(pareFiles[x]));
}
//序列流
Enumeration<FileInputStream> en=Collections.enumeration(al);
SequenceInputStream sis=new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream(new File(dir,filename));
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
private static void mergeFile(File dir) throws IOException {
ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();
for(int x=1;x<=3;x++){
a1.add(new FileInputStream(new File(dir,x+".part")));
}
Enumeration<FileInputStream> en=Collections.enumeration(a1);
SequenceInputStream sis=new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream(new File(dir,""));
byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=1){
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
}