javase文件切割及融合

  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

javase文件切割及融合的相关文章

JavaSE 文件递归之删除&amp;amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; import java.io.File; /** * 递归删除demo目录中全部文件包含目录 * 分析: * A:封装目录 * B:获取改目录下的全部文件或者目录 * C:遍历改file数组,得到每个File对象 * D:推断该file对象是都是目录 * 是:回到B * 否:删除 * @author Admi

java实现把一个大文件切割成N个固定大小的文件

//java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; public class FenGeFile { p

java下io文件切割合并功能加配置文件

package cn.stat.p1.file; 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 ja

Nginx 日志文件切割

Nginx 是一个非常轻量的 Web 服务器,体积小.性能高.速度快等诸多优点.但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理.当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割. 在 Linux 平台上 Shell 脚本丰富,使用 Shell 脚本加 crontab 命令能非常方便地进行切割,但在 Windows 平台上就麻烦一些了,刚才弄了好长时间,就在这里记录整理一下.

JAVA学习第五十五课 — IO流(九)文件切割合成器

文件切割器 private static final int SIZE = 1024 *1024; public static void splitFile(File file) throws IOException{ //用读取流关联文件(不确定文件格式) FileInputStream fis = new FileInputStream(file);//源是一个 byte[] by = new byte[SIZE];//定义1M的缓冲区 FileOutputStream fos = null

python之文件切割保存

最近在看小甲鱼的视频,把写的文件切割代码拿出来捋捋 #-*- coding:utf-8 -*- f = open('foo.txt') man = [] #定义两个空列表 women =[] count = 1 #初始化计数器 for each_line in f: if each_line[:6] != '======': #如果文档未遇到分隔符,则切割 (role,line_spoken) = each_line.split(':',1)#遇到冒号则切割1次 if role == 'boy'

Ffmpeg 实现文件切割

文件切割是一项很常见的基本功能,通过Ffmpeg可以很容易实现这项功能. 首先介绍下基本原理,文件切割说白了就过滤掉文件的部分音视频包,按照什么规则过滤呢? 答案是时间戳.文件中每个视频及音频包都有时间戳用来标识在哪个时间点该包被播放.当我们有过滤需求, 比如需要过滤掉视频文件的第3分钟到5分钟的视频,首先我们需要计算第三分钟及第五分钟的音视频包时间 戳区间,然后遍历视频文件中所有音视频包时间戳,不再查找区间的音视频包直接丢弃,最后将后半段音视频包 时间戳一致前移即可. 基于Ffmpeg的开发流

java 文件切割,为什么在关闭流的时候报错,51行

1 package java_IO.Test_1.File_Split_and_SequeceDemo; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 8 public class FileSplit { 9 10 private File file; 11 private int size;

Ajax实现大文件切割上传

Ajax大文件切割上传 2015-02-07 前面我们已经实现了Ajax的文件上传,不过会受限于服务器的允许的大小, 如果服务器并非自己的,我们就要使用Ajax大文件切割来实现上传. 首先解决Ajax跨域上传问题: 在HTML5中,ajax的跨域有了新的规则-----能否跨域取决于对应的应答. 对方服务器如果愿意接受远程过来的ajax,或某几个域名过来的ajax请求,可以在头信息header中,加入Access-Control-Allow-Origin * 在PHP中加入此信息,就可以实现跨域请