输入需要拆分的文件目录,合并到指定的文件
例:D:\abc\aa\2.txt_spilt————>D:\abc\aa\2.txt
D:\abc\aa\2.txt_spilt:
2.txt.1
2.txt.2
2.txt.3
2.txt.4
2.txt.5
a.png
c.txt
abc文件夹D:\abc\aa\2.txt
思路:
1.)对拆分目录列表
作用:
a.筛选有特定格式后缀的文件,即需要合并的文件
b.对需要合并的文件排序,顺序合并
2.)用FileInputStream()流,批量写入新文件
public class Test2 {
public static void main(String[] args) {
System.out.println("拆分文件存放目录:");
String s1=new Scanner(System.in).nextLine();
File dir=new File(s1);
if(!dir.isDirectory()){
System.out.println("请输入正确的目录路径");
return;
}
System.out.println("合并目标文件:");
String s2=new Scanner(System.in).nextLine();
File file=new File(s2);
if(file.isDirectory()){
System.out.println("请输入具体的【文件】路径,不能是目录");
return;
}
try {
heBing(dir,file);
System.out.println("完成");
} catch (Exception e) {
System.out.println("失败");
e.printStackTrace();
}
}
private static void heBing(File dir, File file) throws Exception{
//对目录 dir 列表
File[] files=list(dir);
FileOutputStream out=new FileOutputStream(file);
FileInputStream in=null;
byte[] buf=new byte[8192];
int n;//
for(File f:files){
in=new FileInputStream(f);
while((n=in.read(buf))!=-1){
out.write(buf, 0, n);
}
in.close();
}
out.close();
}
private static File[] list(File dir) {
/*
* 1.可能有其他文件
* 2.文件顺序
*/
//插一个过滤器
File[] a=dir.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
if(f.isDirectory()) return false;
//返回的文件后缀格式为:.数字
return f.getName().matches(".+\\.\\d+");
}
});
sort(a);
return a;
}
private static void sort(File[] a) {
//外接比较器,对数字后缀排序
Arrays.sort(a,new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
String n1=o1.getName();
String n2=o2.getName();
//xx.xx.32
n1=n1.substring(n1.lastIndexOf(".")+1);
n2=n2.substring(n2.lastIndexOf(".")+1);
int a=Integer.parseInt(n1);
int b=Integer.parseInt(n2);
return a-b;
}
});
}
}