Java实现大文件的切割与合并操作示例

这篇文章主要介绍了Java实现大文件的切割与合并操作,结合实例形式分析了java基于io及util操作大文件按指定个数分割与合并相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java实现大文件的切割与合并操作。分享给大家供大家参考,具体如下:

这里实现对大文件的切割与合并。

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

在这里我只是给大家写下我自己的一点简单的代码:

 package io2; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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; public class FileSplitDemo { /** * 实现对大文件的切割与合并。 按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。 */ public static void main(String[] args) { JFileChooser jfc = new JFileChooser();// Swing中的选择文件 // 选择文件 int result = jfc.showOpenDialog(null);// 显示框架用于选择文件 File file = null;// 要切割的文件 File dest = null;// 目的地文件 try { if (result == JFileChooser.APPROVE_OPTION) {// 选中文件 // 切割文件 file = jfc.getSelectedFile();// 用户选择的文件 dest = new File(file.getParent(), "spliFile"); cutingFile(file, dest);// 切割方法 // 2合并(运行时,直接对刚才切割的那些文件碎片进行合并) String fileName = file.getName(); mergeDemo(dest, fileName);// 合并文件 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void mergeDemo(File dest, String fileName) throws IOException { // 健壮性防护(用File对象去开道) if (!dest.exists()) { throw new RuntimeException("文件不存在"); } // 用一个文件数组将里面的文件都装起来 File parth[] = dest.listFiles();// 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 if (parth.length == 0) { throw new RuntimeException("碎片不存在"); } // y用序列流来合并 ArrayList list = new ArrayList(); // for (int i = 0; i  en = Collections.enumeration(list); SequenceInputStream sq = new SequenceInputStream(en); // 写入到新文件中 FileOutputStream fou = new FileOutputStream(new File(dest, fileName)); byte buf[] = new byte[1024]; sq.read(buf); int len = 0; while ((len = sq.read(buf)) > 0) { fou.write(buf, 0, len); } fou.close(); sq.close(); } private static void cutingFile(File source, File dest) { // 切割 try { FileInputStream fis = new FileInputStream(source); if (!dest.exists()) {// 文件操作IO流要判断文件是否存在。 dest.mkdir(); } byte buf[] = new byte[1024 * 1024];// 1M fis.read(buf); int len = 0; int cout = 1; while ((len = fis.read(buf)) != -1) { // 用OUT流来切割文件 FileOutputStream fout = new FileOutputStream(new File(dest, source.getName() + (cout++) + "part")); fout.write(buf, 0, len); fout.close(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。

文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

以上就是Java实现大文件的切割与合并操作示例的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java