Java实现视频文件的拆分与合并

package DeliverFile;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
 
public class DeliverFile2 {
 
    public static void main(String[] args) {
        cut();
        merge();
    }
//拆分文件
    public static void cut() {
        File file = new File("G:\\test\\source.avi");
        int num = 10;//分割文件的数量
 
        long lon = file.length() / 10L + 1L;//使文件字节数+1,保证取到所有的字节
        try {
            RandomAccessFile raf1 = new RandomAccessFile(file, "r");
 
            byte[] bytes = new byte[1024];//值设置越小,则各个文件的字节数越接近平均值,但效率会降低,这里折中,取1024
            int len = -1;
            for (int i = 0; i < 10; i++) {
                String name = "G:\\test2\\source" + i + ".avi";
                File file2 = new File(name);
                RandomAccessFile raf2 = new RandomAccessFile(file2, "rw");
 
                while ((len = raf1.read(bytes)) != -1){//读到文件末尾时,len返回-1,结束循环
                    raf2.write(bytes, 0, len);
                    if (raf2.length() > lon)//当生成的新文件字节数大于lon时,结束循环
                        break;
                }
                raf2.close();
            }
            raf1.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
//合并文件
    public static void merge() {
        File file = new File("G:\\test2\\new.avi");
        try {
            RandomAccessFile target = new RandomAccessFile(file, "rw");
            for (int i = 0; i < 10; i++) {
                File file2 = new File("G:\\test2\\source" + i + ".avi");
                RandomAccessFile src = new RandomAccessFile(file2, "r");
                byte[] bytes = new byte[1024];//每次读取字节数
                int len = -1;
                while ((len = src.read(bytes)) != -1) {
                    target.write(bytes, 0, len);//循环赋值
                }
                src.close();
            }
            target.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自my.oschina.net/u/3492343/blog/1583228