IO流5

文件切割

/**
 * 文件切割器
 * @throws IOException
 */
public static void splitFile(File file) throws IOException{
    //用读取流关联源文件
    FileInputStream fis = new FileInputStream(file);
    //定义一个1M的缓冲区
    byte[] buf = new byte[SIZE];//1M
    //创建目的
    FileOutputStream fos = null;
    int len = 0;
    int count = 1;
    File dir = new File("F:/");
    if(!(dir.exists())){
        dir.mkdir();
    }
    while((len=fis.read(buf))!=-1){
        fos = new FileOutputStream(new File(dir,(count++)+".part"));
        fos.write(buf,0,len);
    }
}

文件合并

/**
* 合并文件
*/
public static void mergeFile(File dir) throws FileNotFoundException,IOException{
   ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
   for(int i=1;i<=3;i++){
       al.add(new FileInputStream(new File(dir,i+".part")));
   }
   //获取enumeration
   Enumeration<FileInputStream> en = Collections.enumeration(al); 
   SequenceInputStream sis = new SequenceInputStream(en);

   FileOutputStream fos = new FileOutputStream(new File(dir+"meige.txt"));
   byte[] buf = new byte[1024];
   int len = 0;
   while((len=sis.read(buf))!=-1){
       fos.write(buf,0,len);
   }
   fos.close();
}

文件切割合并+配置文件

class properameFilter implements FilenameFilter{
    private String name;
    properameFilter(String name){
        this.name = name;
    }
    @Override
    public boolean accept(File dir, String name) {
        // TODO Auto-generated method stub
        return name.endsWith(this.name);
    } 
}

public static void splitFile_2(File file) throws FileNotFoundException,IOException{
	/** 
	 * 切割文件时,必须要记录住被切割文件的名称,以及切割出来碎片文件的个数,以便于合并。
	 * 这个信息为了进行简单的描述,所有使用键值对方式,用到了properties对象。
	*/
	//用读取流关联源文件
	FileInputStream fis = new FileInputStream(file);
	//定义一个1M的缓冲区
	byte[] buf = new byte[SIZE];//1M
	//创建目的
	FileOutputStream fos = null;
	Properties prop = new Properties();//配置文件
	int len = 0;
	int count = 1;
	File dir = new File("F:/file/");
	if(!(dir.exists())){
	    dir.mkdir();
	}
	while((len=fis.read(buf))!=-1){
	    fos = new FileOutputStream(new File(dir,(count++)+".part"));
	    fos.write(buf,0,len);
	    fos.close();
	}
	//将被切割文件信息保存到properties集和中
	prop.setProperty("filenaem",file.getName());
	prop.setProperty("partcount", count+"");
	//将properties中数据存储到文件中
	fos = new FileOutputStream(new File(dir,"info"+".properties"));
	prop.store(fos, "save file info");
	fos.close();
	fis.close();
}
public static void mergeFile_2(File dir) throws IOException{
	File[] files_prop = dir.listFiles(new properameFilter(".properties"));
	if(files_prop.length!=1){
	    throw new RuntimeException(dir+",没有配置文件");
	}
	Properties prop = new Properties();
	//需要使用读取流
	FileInputStream fis = new FileInputStream(new File(dir,files_prop[0].getName()));
	//使用load方法
	prop.load(fis);
	String count_str = prop.getProperty("partcount");
	int count = Integer.parseInt(count_str);
	String filename = prop.getProperty("filenaem");
	File[] files = dir.listFiles(new properameFilter(".part"));
	if(files.length!=(count-1)){
	    throw new RuntimeException("碎片个数不对,应该是:"+count+"个");
	}
	ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
	for(int i=1;i<count;i++){
	    al.add(new FileInputStream(files[i-1]));
	}
	//获取enumeration
	Enumeration<FileInputStream> en = Collections.enumeration(al); 
	SequenceInputStream sis = new SequenceInputStream(en);
	
	FileOutputStream fos = new FileOutputStream(new File(dir+"meige.txt"));
	byte[] buf = new byte[1024];
	int len = 0;
	while((len=sis.read(buf))!=-1){
	    fos.write(buf,0,len);
	}
	fos.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值