package com.IO;
/**
* 合并文件:合并由拆分文件拆分的文件
* 要求将拆分文件放到一个文件夹中
* 主要利用随机文件读取和文件输入输出流
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Combination {
String srcDirectory = null;// 拆分文件存放的目录
String[] separatedFiles;// 存放所有拆分文件名
String[][] separatedFilesAndSize;// 存放所有拆分文件名及分件大小
int FileNum = 0;// 确定文件个数
String fileRealName = "";// 据拆分文件名确定现在原文件名
public Combination() {
srcDirectory = "d:\\test\\";
}
/**
*
* @param sFileName
* 任一一个拆分文件名
* @return 原文件名
*/
private String getRealName(String sFileName) {
StringTokenizer st = new StringTokenizer(sFileName, ".");
return st.nextToken() + "." + st.nextToken();
}
/**
* 取得指定拆分文件模块的文件大小
*
* @param FileName
* 拆分的文件名
* @return
*/
private long getFileSize(String FileName) {
FileName = srcDirectory + FileName;
return (new File(FileName).length());
}
/**
* 生成一些属性,做初使化
*
* @param drictory
* 拆分文件目录
*/
private void getFileAttribute(String drictory) {
File file = new File(drictory);
separatedFiles = new String[file.list().length];// 依文件数目动态生成一维数组,只有文件名
separatedFiles = file.list();
// 依文件数目动态生成二维数组,包括文件名和文件大小
// 第一维装文件名,第二维为该文件的字节大小
separatedFilesAndSize = new String[separatedFiles.length][2];
Arrays.sort(separatedFiles);// 排序
FileNum = separatedFiles.length;// 当前文件夹下面有多少个文件
for (int i = 0; i < FileNum; i++) {
separatedFilesAndSize[i][0] = separatedFiles[i];// 文件名
separatedFilesAndSize[i][1] = String
.valueOf(getFileSize(separatedFiles[i]));// 文件大上
}
fileRealName = getRealName(separatedFiles[FileNum - 1]);// 取得文件分隔前的原文件名
}
/**
* 合并文件:利用随机文件读写
*
* @return true为成功合并文件
*/
private boolean CombFile() {
RandomAccessFile raf = null;
long alreadyWrite = 0;
FileInputStream fis = null;
int len = 0;
byte[] bt = new byte[1024];
try {
raf = new RandomAccessFile(srcDirectory + fileRealName, "rw");
for (int i = 0; i < FileNum; i++) {
raf.seek(alreadyWrite);
fis = new FileInputStream(srcDirectory
+ separatedFilesAndSize[i][0]);
while ((len = fis.read(bt)) > 0) {
raf.write(bt, 0, len);
}
fis.close();
alreadyWrite = alreadyWrite
+ Long.parseLong(separatedFilesAndSize[i][1]);
}
raf.close();
} catch (Exception e) {
e.printStackTrace();
try {
if (raf != null)
raf.close();
if (fis != null)
fis.close();
} catch (IOException f) {
f.printStackTrace();
}
return false;
}
return true;
}
public static void main(String[] args) {
Combination combination = new Combination();
combination.getFileAttribute(combination.srcDirectory);
combination.CombFile();
System.exit(0);
}
}
分享到:
相关推荐
单纯用vb实现的wav文件合并,两个文件要有相同的码率,采样位数,声道等等,总之就是两个正常大小的文件合并是可以的,只要两个文件的总大小小于2GB,那就可以了.这个纯vb6实现,像一般的几十兆的wav文件合并,还是很快的,...
应用场景:使用pandas把多个相同结构的Excel文件合并为一个。 原始数据: 相关代码: import os import pandas as pd # 将文件读取出来放一个列表里面 pwd = 'test' # 获取文件目录 # 新建列表,存放文件名 ...
CSV文件批量合并工具(批量合并多个CSV文件)是一款简洁好用,绿色小巧的CSV文件合并工具。CSV文件批量合并工具非常的使用,让你能够更轻松快捷的进行CSV文件合并工作,非常方便。可以同时批量合并多个CSV文本文件,...
Bin文件合并工具,可支持批量合并
压缩文件里是bin格式文件的合并源码,用c语言实现将两个bin文件合并成一个bin文件,用于mcu开发中bootloader和app的合并
将多个CSV文件合并成一个文件 CSV全称Comma-Separated Values,它是一种通用的,简单的,被广泛采用的一种表格数据格式。采用纯文本格式存储,用分隔符号分开。它格式类似于数据库表格,每一行,中间用分隔符分开,...
Qt小应用,实现bin文件合并,hex文件合并,在线升级用的加密加开头识别字符的bin文件,通过bat文件传入开头识别字符,bin文件合并app偏移参数。MDK中调用这个bat文件,可以实现编译后三个文件自动生成的功能。
Attention: ...运行后将在音频文件所在目录下生成对应hex文件,并将所生成的hex和项目生成的hex文件合并存放于UVBuild目录下 4.生成的最终文件名尾加'1'(目标文件为'***.hex',生成最终文件名为'***1.hex')
把两个bin文件合并成一个bin文件
自己用QT写的hex文件合并小工具,可以合并iap和app的hex文件,主要用于做升级的时候使用,选好iap和app程序后点击生成,自动在小工具当前路径下生成一个新的hex文件,暂时只支持hex文件合并,不支持其他格式,也没有...
TDMS 文件合并。
exe文件合并器exe文件合并器exe文件合并器exe文件合并器exe文件合并器exe文件合并器exe文件合并器
可以将同一文件夹下面的word文件合并成一个word文件
LINUX下C语言实现 两个文件合并成第三个文件
BIN文件合并,多个BIN文件合并一个文件
这是用WPS Excel的JS宏写的文件合并工具,可以通过对话框选择文件,把选中的Excel表格进行合并。里面包含xlsm启用宏的工作簿(js源码)和4个示例的Excel表格文件,下载不需要积分。
简易文件合并器是一款非常使用的文件合并工具,工具为绿色版本,打开即可使用,主要功能为可以帮助您合成各种格式的文件,支持ASCII文本文件和AVI, BMP, JPEG, DOC等格式的转换,需要的朋友赶快来下载吧。...
DXF文件合并工具,基于32位操作系统,只要你的CAD能打得开的图纸文件,就能合并
能在windows上将多个.bin文件合并成一个文件。是用QT写的工具
多文件合并工具 filemerging.rar