JAVA文件合并-FileOutputStream及FileInputStream流运用

package tarena.day1805;


import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;


public class Test1 {


public static void main(String[] args) {
System.out.println("输入拆分文件路径:");
String path1=new Scanner(System.in).nextLine();
System.out.println("输入合并的目录文件路径:");
String path2=new Scanner(System.in).nextLine();
try{
//具体实现方法:
heBing(path1,path2);
System.out.println("成功-->");
} catch (Exception e) {
System.out.println("<--失败");
e.printStackTrace();
}
}


//需要抛异常
private static void heBing(String path1, String path2) throws Exception {


/*
* 1. 创建 File 实例封装 path1 目录
* 2. 对目录列表,
* 只列出以数字结尾的文件
* 3. 对列出的文件按数字后缀排序

* 4. 创建 path2 目标文件的输出流 out
* 5. 遍历文件列表
* 6. 对一个小文件创建输入流
* 7. 批量读取数据,
* 并将读到的数据输出到 out
* 8. 关闭输入流
* 9. 关闭输出流
*/
File dir=new File(path1);
File[] files=dir.listFiles(new FileFilter() {
public boolean accept(File f) {
                if(f.isDirectory())return false;
return f.getName().matches(".+\\.\\d+");
}
});
Arrays.sort(files,new Comparator<File>(){
public int compare(File o1, File o2) {
String n1=o1.getName();
String n2=o2.getName();
int a=Integer.parseInt(n1.substring(n1.lastIndexOf(".")+1));
int b=Integer.parseInt(n2.substring(n2.lastIndexOf(".")+1));
return a-b;
}

});

FileOutputStream out=new FileOutputStream(path2);
byte[] buf=new byte[8192];//8k
int n;
for (File f:files) {
FileInputStream in=new FileInputStream(f);
while((n=in.read(buf))!=-1)
{
out.write(buf, 0, n);
}
in.close();
}
out.close();
}
}
发布了19 篇原创文章 · 获赞 0 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ds19920925/article/details/41495415
今日推荐