文件切割与合并

来源:互联网 发布:机顶盒桌面软件 编辑:程序博客网 时间:2024/03/29 06:05

实现对大文件的切割与合并。
按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。

文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。
文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文 件或配置文件,也可以同样用文件选择对话框来读取用户的选择。

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.ArrayList;import java.util.Collections;import java.util.Enumeration;import javax.swing.JFileChooser;import javax.swing.JOptionPane;public class qiege {    public static void main(String[] args) throws IOException {        JFileChooser jfc = new JFileChooser();//出现文件选择框        int result = jfc.showOpenDialog(null);        if (result == JFileChooser.APPROVE_OPTION) {            File file = jfc.getSelectedFile();            // System.out.println("-----"+file.getName());-----录像73 静态块.lxe            File dir = file.getParentFile();            // System.out.println(file.getParentFile()+dir.getAbsolutePath()+dir.getName());                                                         //F:\新建文件夹 F:\新建文件夹 新建文件夹            fileSplit(file, dir); //切割            String fileName = file.getName();            File desDir = new File(dir, "split");            mergerFile(desDir, fileName); //合并        }    }    private static void fileSplit(File file, File dir) throws IOException {        File desDir = new File(dir.getAbsolutePath() + "/split");        if (!desDir.exists()) {            desDir.mkdirs();//可以在不存在的目录中创建文件夹    mkdik()只能在已经存在目录中创建        }        FileInputStream fin = new FileInputStream(file);        FileOutputStream fout = null;        int len = 0;        int count = 1;        byte buf[] = new byte[1024 * 1024];        while ((len = fin.read(buf)) != -1) {            String str = file.getName();// 录像73 静态块.lxe            String nm = str.substring(0, str.lastIndexOf("."));// 录像73 静态块            String fileName = nm + "(" + (count++) + ").part";// 录像73                                                                // 静态块(122).part            fout = new FileOutputStream(desDir.getAbsolutePath() + "/"                    + fileName);// F:\新建文件夹\split/录像73 静态块(122).part            fout.write(buf, 0, len);            fout.close();        }        fin.close();        JOptionPane.showMessageDialog(null, "文件切割完毕");    }private static void mergerFile(File srcDir, String fileName)throws IOException {//合并的文件夹,合并名                                        if (!srcDir.exists()) {            JOptionPane.showMessageDialog(null, "合并的文件不存在");            return;        }        File partFiles[] = srcDir.listFiles();        if (partFiles == null || partFiles.length == 0) {            JOptionPane.showMessageDialog(null, "碎片不存在");            return;        }        ArrayList<FileInputStream> list = new ArrayList<FileInputStream>();        for (int i = 1; i < partFiles.length; i++) {            String nm = fileName.substring(0, fileName.lastIndexOf("."));            list.add(new FileInputStream(new File(srcDir, nm + "(" + (i + 1)                    + ").part")));           //(父路径,子名)        }        Enumeration<FileInputStream> en = Collections.enumeration(list);        SequenceInputStream sis = new SequenceInputStream(en);        FileOutputStream fout = new FileOutputStream(new File(srcDir, fileName));//合并的文件夹下的文件        byte buf[] = new byte[1024];        int len = 0;        while ((len = sis.read(buf)) != -1) {            fout.write(buf, 0, len);        }        sis.close();        fout.close();    }}

这里写图片描述
这里写图片描述
这里写图片描述

0 0
原创粉丝点击