文件的拆分与合并
2016-05-28 12:19
585 查看
文件拆分:
文件拆分的实现代码:
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();
}
}
文件拆分的实现代码:
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树