Java文件拆分与合并
2015-08-10 17:35
459 查看
思路:用字节流把文件拆分,然后用序列流合并字节流。
练习:文件切割与合并
实现对大文件的切割与合并。按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。
示例程序说明:
1)文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。
2)文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。
代码实现:
这个文件是myeclipse项目,有包名。
练习:文件切割与合并
实现对大文件的切割与合并。按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。
示例程序说明:
1)文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。
2)文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。
代码实现:
package outIn2.fileCutAndMerge; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; 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.Enumeration; import java.util.Vector; /* * 1)学习切割文件 * 2)合并文件 */ public class Test2 { /* * crossLine-切割线 */ static int crossLine = 1024; static String newFileName = "Tetris"; public static void main(String[] args) { // test1(); test2(); } /* * 合并文件 */ private static void test2() { /* * 先得到需要合并文件的数量, * 然后合并。 */ File f = new File("d:/ex/a/test1"); File[] files = null; if (f.isDirectory()) { files = f.listFiles(); } String[] strs = new String[files.length]; for (int i = 0; i < strs.length; i++) { strs[i] = files[i].getName(); } BufferedInputStream[] bins = new BufferedInputStream[files.length]; Vector<BufferedInputStream> v = new Vector<BufferedInputStream>(); BufferedOutputStream bout = null; try { for (int i = 0; i < bins.length; i++) { bins[i] = new BufferedInputStream(new FileInputStream( "d:/ex/a/test1/" + strs[i])); v.add(bins[i]); } Enumeration<BufferedInputStream> en = v.elements(); SequenceInputStream sin = new SequenceInputStream(en); int len = 0; byte[] buf = new byte[1024]; bout = new BufferedOutputStream(new FileOutputStream( "d:/ex/a/test2/Tetris_Successful.zip")); while ((len = sin.read(buf)) != -1) { bout.write(buf, 0, len); } bout.flush(); } catch (IOException e) { e.printStackTrace(); } finally { for (int i = 0; i < bins.length; i++) { if (bins != null) { try { bins[i].close(); } catch (IOException e) { e.printStackTrace(); } } } if (bout != null) { try { bout.close(); } catch (IOException e) { e.printStackTrace(); } } } } /* * 拆分文件 */ public static void test1() { // FileInputStream fin = null; // FileOutputStream fout = null; BufferedInputStream bin = null; BufferedOutputStream bout = null; try { bin = new BufferedInputStream(new FileInputStream( "d:/ex/a/Tetris0.zip")); bout = new BufferedOutputStream(new FileOutputStream( "d:/ex/a/test1/Tetris1.zip")); /* * 一次搬1KB的数据。 */ int count = 0; int len = 0; int num = 2; byte[] buf = new byte[1024]; while ((len = bin.read(buf)) != -1) { /* * 写入新文件 */ bout.write(buf, 0, len); count++; if (count >= crossLine) { bout.close(); bout = new BufferedOutputStream(new FileOutputStream( "d:/ex/a/test1/Tetris" + num + ".zip")); num++; count = 0; } if (num >= 45) { break; } } } catch (IOException e) { e.printStackTrace(); } finally { if (bin != null) { try { bin.close(); } catch (IOException e) { e.printStackTrace(); } } if (bout != null) { try { bout.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
这个文件是myeclipse项目,有包名。
相关文章推荐
- java.lang.IllegalStateException: Optional int parameter 'currentSpecialIndex' is present but cannot
- Java Web基础——自定义标签和JSTL
- 【Java并发编程实战】—–“J.U.C”:锁,lock
- Eclipse的java代码出错:The import XXXX cannot be resolved
- JAVA -- 设计模式
- 【Java并发编程实战】-----“J.U.C”:锁,lock
- java IO流(properties)
- Java 23种模式一点就通
- Java中守护线程的总结(转)
- Windows下搭建Eclipse+Android4.0开发环境
- Struts2中Action由自己与由Spring管理的区别
- java IO流(File类)
- Spring property文件配置方法以及如何与工程分离
- Spring Batch学习
- MyEclipse 代码自动提示
- 智渔课堂官方免费教程七:Java基础之类和对象
- Java统计二进制数中1的个数
- I学霸官方免费教程七:Java基础之类和对象
- Myeclipse中解决spring配置文件无提示问题
- 写一个程序,乞讨1+2*2+3*3+n*n值 Java