用Java实现文件分割/合并操作
来源:互联网 发布:真人rpg游戏发展数据 编辑:程序博客网 时间:2024/04/30 08:31
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();//分割
}
}
- 用Java实现文件分割/合并操作
- 用Java实现文件分割/合并操作
- 用Java简单实现文件分割与合并
- 用Java简单实现文件分割与合并
- 用java实现大文件分割与合并
- 用Java实现大文件的分割与合并
- JAVA 实现文件分割与合并
- Java 实现文件分割合并的代码
- java实现文件的分割与合并
- Java 实现文件分割,合并功能
- java 分割合并文件
- java 合并文件-分割文件
- RandomAccessFile实现文件分割、合并
- RandomAccessFile实现文件分割、合并
- Java分割合并大文件
- 文件分割合并类(java)
- java 文件分割及合并
- 简单文件分割合并器的Java实现
- 网易相册之问题多多
- 在DWR中实现直接获取一个JAVA类的返回值
- 自用的一个vb类
- Hibernate+Struts分页代码
- MP3文件格式
- 用Java实现文件分割/合并操作
- Siapa
- windows2003的IIS有限制文件上传大小问题
- 人民币升值--带来的经济问题
- 今天累了
- 开发统一的博客接口
- UNIX命令详解
- ping 的功能解释
- anywhy.cn 集成搜索 我的浏览器的新首页