1 package com.split; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 8 public class FileSplit { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 //String file = "D:\\arch\\d.jpg"; 13 String file="D:\\arch\\b.txt"; 14 split(file); 15 String s1="D:\\arch\\b.txtpart-0"; 16 String s2="D:\\arch\\b.txtpart-1"; 17 String s3="D:\\arch\\b.txtpart-2"; 18 fuse(s1,s2,s3); 19 20 } 21 /** 22 * 文件融合 23 * @param srcFile 24 */ 25 public static void fuse(String... srcFile ){ 26 for (String string : srcFile) { 27 fusion(string); 28 } 29 } 30 private static void fusion(String file) { 31 File f=new File(file); 32 FileInputStream fis=null; 33 FileOutputStream fos=null; 34 try { 35 if(f.exists()){ 36 if(f.isFile()){ 37 fis=new FileInputStream(f); 38 //string="D:\\arch\\b.txtpart-0" 39 String srcPath=f.getAbsolutePath(); 40 String sep=""; 41 if(srcPath.contains("\\")){ 42 sep="\\"; 43 } 44 int index=srcPath.lastIndexOf(sep); 45 46 //String s=srcPath.substring(0, (srcPath.length()-6)); 47 //获取最后一个名字的字符串 48 String s=srcPath.substring(0, index+f.getName().length()); 49 fos=new FileOutputStream(new File(s),true); 50 byte[] buf=new byte[1024]; 51 int len=0; 52 while((len=fis.read(buf))!=-1){ 53 fos.write(buf, 0, len); 54 fos.close(); 55 } 56 } 57 } 58 fis.close(); 59 } catch (Exception e) { 60 // TODO: handle exception 61 } 62 } 63 /** 64 * 文件的切割 65 */ 66 public static void split(String srcfile) { 67 68 File f = new File(srcfile); 69 FileOutputStream fos = null; 70 try { 71 FileInputStream fis = new FileInputStream(f); 72 // 获取文件大小 73 int len = (int) f.length(); 74 // 切割块数 75 int blocks = 3; 76 // 每块的大小 77 int blocksSize = len / blocks; 78 int len0 = 0; 79 byte[] buf = new byte[1024]; 80 for (int i = 0; i < blocks; i++) { 81 //根据源目录创建目标文件对象 82 fos = new FileOutputStream(new File(f.getParent(), f.getName() + "part-" + i)); 83 // 如果是最后一块 84 if (i == (blocks - 1)) { 85 while ((len0 = fis.read(buf)) != -1) { 86 fos.write(buf, 0, len0); 87 } 88 fos.close(); 89 } 90 // 不是最后一块 91 else { 92 // 不足缓冲区 93 if (blocksSize <=buf.length) { 94 buf = new byte[blocksSize]; 95 fis.read(buf); 96 fos.write(buf); 97 fos.close(); 98 } 99 // 超过缓冲区 100 else { 101 int count = blocksSize / buf.length; 102 for (int j = 0; j < count; j++) { 103 // 最后一次读取 104 if (j == (count - 1)) { 105 if(blocksSize%buf.length !=0){ 106 buf = new byte[buf.length + (blocksSize % buf.length)]; 107 fis.read(buf); 108 fos.write(buf); 109 fos.close(); 110 } 111 } 112 else { 113 fis.read(buf); 114 fos.write(buf); 115 } 116 } 117 } 118 } 119 } 120 fis.close(); 121 } catch (Exception e) { 122 // TODO Auto-generated catch block 123 e.printStackTrace(); 124 } 125 } 126 }
时间: 2024-10-14 18:57:36