以下代码应该可以解决你那个问题,并且可以解决合并更多的文件带来文件名排序问题
package test;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
public class problem {
@SuppressWarnings("unchecked")
public static void main1(String[] args) throws IOException {
//合并
//创建输入和输出流对象
FileInputStream input = null;
FileOutputStream fos = new FileOutputStream("test\\IO.JPG");
//创建一个TreeSet集合并传入一个比较器
TreeSet<File> list = new TreeSet<File>(new Compare());
//创建要合并的文件目录,并获取其中文件数组
File file = new File("test");
//定义一个过滤去,讲不为.part的文件全部过滤掉
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
return pathname.getName().endsWith("part");
}
});
//将文件数组转换为集合并保存至TreeSet
list.addAll(Arrays.asList(files));
//创建byte数组和变量len
byte[] arr = new byte[1024];
int len = 0;
//循环迭代文件集合并读取每个文件内容并写入输出流
for (File subFile : list) {
System.out.println(subFile.getName());
input = new FileInputStream(subFile);
len = input.read(arr);
fos.write(arr, 0, len);
//关闭流和删除.part文件
input.close();
subFile.delete();
}
//关闭流
fos.close();
}
public static void main(String[] args) throws IOException {
//切割文件并创建输出和输入流
File file = new File("test\\IO.JPG");
FileInputStream input = new FileInputStream(file);
FileOutputStream out = null;
//定义byte数组和变量len与count
byte[] arr = new byte[1024];
int len = 0,count = 0;
//读取输入流的文件并以1KB大小循环写入从0开始递增的.part文件中
while ((len = input.read(arr))!=-1) {
out = new FileOutputStream("test\\" + count+++".part");
out.write(arr, 0, len);
//关闭流
out.close();
}
//关闭流
input.close();
}
}
//创建一个文件比较器,根据文件的名称来比较进行自然排序
class Compare implements Comparator<File> {
@Override
public int compare(File o1, File o2) {
return new Integer(o1.getName().substring(0,
o1.getName().lastIndexOf(".")).toString())
.compareTo(new Integer(o2.getName().substring(0,
o2.getName().lastIndexOf(".")).toString()));
}
}
|