用Java实现文件分割合并操作

    技术2022-05-11  38

    package org.glpt.file;

    import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import java.io.RandomAccessFile;import java.sql.Timestamp;import java.util.Arrays;

    public class SmallToBig {

     private String newFileName;// 新文件名字

     private String filterName;// 过滤规则名字

     private String oldFileName;// 老文件名字

     public SmallToBig(String oldFileName, String newFileName, String filterName) {  this.newFileName = newFileName;

      this.filterName = filterName;

      this.oldFileName = oldFileName; }

     public void unite() {  Timestamp startTime = null; // 获得系统的开始时间  Timestamp endTime = null; // 获得系统的结束时间  startTime = new Timestamp(System.currentTimeMillis());  String[] fileNameTemp;  File inFile = new File("F://workspace//glpt//database//temporaryfiles"); //临时文件所在的目录  File outFile = new File(newFileName); // 取得输出文件的名字  RandomAccessFile outt = null;  byte[] bytes = new byte[2048];  try {   outt = new RandomAccessFile("F://workspace//glpt//database//data//"     + outFile, "rw");   // 取得符合条件的文件名   fileNameTemp = inFile.list(new FilenameFilter() {    public boolean accept(File dir, String name) {     System.out.println("dir = " + dir);     System.out.println("name = " + name);     String rr = new File(name).toString();     return rr.endsWith(filterName);    }   });   Arrays.sort(fileNameTemp);// 对文件名排序   // 打开所有的文件再写入到一个文件里   for (int i = 0; i < fileNameTemp.length; i++) {    for (int j = 0; j < fileNameTemp.length; j++) {     if (fileNameTemp[j].equals(oldFileName + i + filterName)) {      System.out.println(fileNameTemp[j]);// 顺序打印写入目标文件的文件名      inFile = new File(fileNameTemp[j]);      RandomAccessFile inn = new RandomAccessFile(        "F://workspace//glpt//database//temporaryfiles//"          + inFile, "r");//临时文件所在的位置      int len;   //写入的长度      while ((len = inn.read(bytes)) != -1) {       outt.write(bytes, 0, len);//每次写入bytes量       outt.skipBytes(len);//按顺序写入      }      inn.close();     }    }   }   outt.close();  } catch (Exception e) {   e.printStackTrace();  } finally {   if (outt != null)    try {     outt.close();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   // *********************测试***********************   endTime = new Timestamp(System.currentTimeMillis());   System.out.println("开始时间:" + startTime.toString());   System.out.println("结束时间:" + endTime.toString());   long ss = endTime.getTime() - startTime.getTime();   System.out.println("共用时间:" + ss / 1000.0 + "s");   // ***********************************************

      } }

    }

    package org.glpt.file;

    import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;import java.sql.Timestamp;

     

    public class BigToSmall {

     String fileName; // 分割文件的文件名

     int size; // 每份的大小

     private String lastname;// 临时文件后缀

     public BigToSmall(String fileName, String size, String lastname) {

      this.fileName = fileName;

      this.size = Integer.parseInt(size) * 1024;// 转换成M

      this.lastname = lastname; }

     public void cut() {

      Timestamp startTime = null; // 获得系统的开始时间  Timestamp endTime = null; // 获得系统的结束时间  startTime = new Timestamp(System.currentTimeMillis());  File inFile = new File(fileName);  long fileLength = inFile.length(); // 取得文件的大小  System.out    .println("Size of file = " + fileLength / 1024.0 / 1024 + "M");  System.out.println("Name of File = " + inFile.getName());

      long fileNumber; // 取得要分割的个数  RandomAccessFile inn = null;

      try {   inn = new RandomAccessFile(inFile, "r");   // 打开要分割的文件   long filePartCount = fileLength / size;   fileNumber = (fileLength % size) == 0 ? filePartCount     : (filePartCount + 1);   int i = 0;   int j = 0;

       byte[] bytes = new byte[size * 10];// 缓存   // 根据要分割的数目输出文件   for (; j < fileNumber; j++) {    File outFile = new File(      "F://workspace//glpt//database//temporaryfiles//"        + inFile.getName() + j + lastname);    RandomAccessFile outt = new RandomAccessFile(outFile, "rw");

        for (i = 0; i < size;) {     int len = inn.read(bytes);     if (len == -1) {      break;     }     outt.write(bytes, 0, len);     i = i + len;    }    outt.close();// 关闭文件流   }

       inn.close();// 关闭文件流  } catch (Exception e) {   e.printStackTrace();  } finally {   if (inn != null)    try {     inn.close();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   // ********************测试***********************   System.out.println("每份文件大小:" + size / 1024.0 / 1024 + "M");   endTime = new Timestamp(System.currentTimeMillis());   System.out.println("开始时间:" + startTime.toString());   System.out.println("结束时间:" + endTime.toString());   long ss = endTime.getTime() - startTime.getTime();   System.out.println("共用时间:" + ss / 1000.0 + "s");   // ***********************************************  } }

    }

    package org.glpt.file;

    import org.glpt.file.SmallToBig;import org.glpt.file.BigToSmall;

    public class ActionOfFile { private SmallToBig smalltoBig; //引用SmallToBig类,实现合并

     private BigToSmall bigtoSmall;//引用BigToSmall类,实现分割

     public ActionOfFile() { }

     public void smallToBig(String oldFileName,String newFileName,String filterName) {  smalltoBig = new SmallToBig(oldFileName,newFileName, filterName);  smalltoBig.unite();//合并

     }

     public void bigToSmall(String fileName, String size,String lastname) {  bigtoSmall = new BigToSmall(fileName, size,lastname);  bigtoSmall.cut();//分割

     }


    最新回复(0)