您的位置:首页 > 编程语言 > Java开发

文件的拆分与合并

2016-05-28 12:19 489 查看
文件拆分:



 文件拆分的实现代码:


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class SplitTest {
public static void main(String[] args) {
System.out.println("请输入一个“文件”路径");
String s = new Scanner(System.in).nextLine();
File f =new File(s);
if(!f.isFile()){
System.out.println("请输入正确的文件路径,不是目录路径");
return;
}

System.out.println("请输入拆分的大小:(Kb)");
long size =new Scanner(System.in).nextLong();
size *=1024;

try {
split(f,size);
System.out.println("文件拆分成功");
} catch (Exception e) {
System.out.println("文件拆分失败");
e.printStackTrace();
}

}

private static void split(File f, long size) throws Exception {
//原文件名
String name =f.getName();
//准备拆分文件存放的路径
File dir =new File(f.getAbsolutePath()+"_split");
if(dir.isDirectory()){
//遍历,清空里面的文件
File[] files = dir.listFiles();
for (File ff : files) {
ff.delete();
}
}else{
dir.mkdirs();
}

//定义字节计数变量,和文件计数变量
long byteCount=0;
int fileCount=0;

BufferedInputStream in =new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream out=null;

int b ;
while((b=in.read())!=-1){
//如果没有输出流,或者前一个文件满了
if(out==null || size==byteCount ){
if(out!=null){
out.close();
}
out =new BufferedOutputStream(new FileOutputStream(new File(dir,name+"."+(++fileCount))
128f8
));
byteCount =0;
}
out.write(b);
byteCount++;
}
in.close();
out.close();
}
}

文件合并:



 

文件合并实现代码:



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

public class ConcatTest {
public static void main(String[] args) {
System.out.println("请输入拆分文件存放所在的目录");
String s =new Scanner(System.in).nextLine();
File dir =new File(s);
if(!dir.isDirectory()){
System.out.println("请输入一个目录路径,不是文件路径");
return;
}

System.out.println("请输入目标文件");
s =new Scanner(System.in).nextLine();
File f =new File(s);
if(f.isDirectory()){
System.out.println("请输入一个文件路径,不是目录");
return;
}

try {
concat(f,dir);
System.out.println("文件合并完成");
} catch (Exception e) {
System.out.println("文件合并失败");
e.printStackTrace();
}

}

private static void concat(File f, File dir) throws Exception {
//先把此目录路径下的文件过滤,找到需要合并的文件
File[] files = dir.listFiles(new FileFilter() {

@Override
public boolean accept(File ff) {
if(ff.isDirectory()) return false;
//是文件
String n =ff.getName();
int index =n.lastIndexOf(".");
if(index==-1){
return false;
}
n=n.substring(index+1);
return (n.matches("\\d+"));
}
});
//将所需要的文件进行排序
Arrays.sort(files , new Comparator<File>() {

@Override
public int compare(File o1, File o2) {
String n1 =o1.getName();
String n2 =o2.getName();
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;
}
});

//开始执行文件合并工作
BufferedInputStream in =null;
BufferedOutputStream out =new BufferedOutputStream(new FileOutputStream(f));

for (File fff : files) {
in =new BufferedInputStream(new FileInputStream(fff));
int b;
while((b=in.read())!=-1){
out.write(b);
}
in.close();
}
out.close();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java file 拆分 合并