欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 流操作对文件的分割和合并的实例详解

程序员文章站 2024-04-01 18:59:58
java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。     下面是代码:...

java 流操作对文件的分割和合并的实例详解

学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。

    下面是代码:

package com.dufy.file; 
 
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.list; 
/** 
 * 文件的切割和合并 
 * 1.要切割和合并文件:主要考虑的就是文件的源地址,目标地址,暂存文件地址和文件名称 
 * 2.切割文件:判断给的暂存地址是否存在,不存在,则创建;从源地址中读出文件,按照给定的大小进行文件的切割操作放入暂存地址中 
 * 3.合并文件:判断给定的目标地址是否存在,不存在,则创建;定义list集合将暂存地址中的文件全部读取出来,放到list集合中 
 *     然后使用enumeration列举出所有文件,合并流合并文件 
 *     最后写入到目标的地址中 
 * 注:本例子中所有的异常都采用抛出的方式处理 
 * @author aflyun 
 * 
 */ 
public class testfilecutunion { 
 
  public static void main(string[] args) throws ioexception { 
     
    string fsrc = "d:/1.jpg";//源文件的目录 
    string fdir = "d:/1";//目标文件的目录 
    string ftemp = "d:/2";//暂存文件的目录 
    file srcfile = new file(fsrc); 
    file dirfile = new file(fdir); 
    file tempfile = new file(ftemp); 
    string filename = srcfile.getname();//获取文件的名称 
    cutfile(srcfile,tempfile);//调用分割方法 
    unionfile(dirfile,tempfile,filename);//调用合并方法 
     
     
  } 
   
  /** 
   * 切割文件 
   * @param srcfile 
   * @param tempfile 
   * @throws ioexception 
   */ 
   
  public static void cutfile(file srcfile, file tempfile) throws ioexception { 
    //读取源地址文件 
    fileinputstream fis = new fileinputstream(srcfile); 
    fileoutputstream fos = null; 
    //是否为文件,不是就创建 
    if(!tempfile.isfile()){ 
      tempfile.mkdirs(); 
    } 
   
    byte[] b = new byte[100]; 
    int len =0; 
    int count = 0; 
    while((len=fis.read(b)) != -1){ 
      int num = count++; 
      //写入暂存地址目录中 
      fos = new fileoutputstream(new file(tempfile, num+".part")); 
      fos.write(b, 0, len); 
       
    } 
    fos.flush(); 
    fos.close(); 
    fis.close(); 
     
    system.out.println("分割完成!"); 
  } 
  /** 
   * 合并文件 
   * @param dirfile 
   * @param tempfile 
   * @param filename 
   * @throws ioexception 
   */ 
  public static void unionfile(file dirfile, file tempfile, string filename) throws ioexception { 
    //判断目标地址是否存在,不存在则创建 
    if(!dirfile.isfile()){ 
      dirfile.mkdirs(); 
    } 
    list<fileinputstream> list = new arraylist<fileinputstream>(); 
    //获取暂存地址中的文件 
    file[] files = tempfile.listfiles(); 
     
    for (int i = 0; i < files.length; i++) { 
      //用fileinputstream读取放入list集合 
      list.add(new fileinputstream(new file(tempfile, i+".part"))); 
    } 
    //使用 enumeration(列举) 将文件全部列举出来 
    enumeration<fileinputstream> eum = collections.enumeration(list); 
    //sequenceinputstream合并流 合并文件 
    sequenceinputstream sis = new sequenceinputstream(eum); 
    fileoutputstream fos = new fileoutputstream(new file(dirfile, filename)); 
    byte[] by = new byte[100]; 
    int len; 
    while((len=sis.read(by)) != -1){ 
      fos.write(by, 0, len); 
    } 
    fos.flush(); 
    fos.close(); 
    sis.close(); 
    system.out.println("合并完成!"); 
  } 
} 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!