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();//分割
}
}