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

本文实例讲述了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<FileInputStream> list = new ArrayList<FileInputStream>();
// for (int i = 0; i < parth.length; i++) {
// list.add(new FileInputStream(parth[i]));//不能这样,这样合并出来的文件是顺序乱的
// }
for (int i = 0; i < parth.length; i++) {
list.add(new FileInputStream(new File(dest, fileName + (i + 1)
+ "part")));// 套接技术,文件加的顺序要和原文件一样
}
// 枚举对象接口
Enumeration<FileInputStream> 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程序设计有所帮助。

(0)

相关推荐

  • java 实现切割文件和合并文件的功能

    java 实现切割文件和合并文件的功能 一.切割文件代码如下: 需求:将一个媒体文件切割成多个碎片(每个碎片的大小为1M),并添加配置说明文件 1.创建(指定)一个文件夹,用于保存切割出来的碎片           2.创建源文件对象,并传入一个输入流对象           3.创建一个缓冲区为1M           4.创建一个输入流对象并将源文件对象传入,创建一个输出流对象引用           5.每个缓冲区获取到碎片时,使用输出对应流对象写入到一个新的文件           6.

  • 实例解析使用Java实现基本的音频播放器的编写要点

    Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放因素,要知道最早的Java 1.1版本中,没有后来的javax.sound包,音频只能通过Applet包调取-- 遗憾的是,在图形程序开发中,我们的程序却又难免要使用到背景音乐.效果音等配合图像操作,哎,这实在是Sun大神给我们开的一个不打不小的玩笑.万幸后来Sun大神开眼,提供了javax.sound包,才解救我们于水深火热当中~ 但是继之而来的问题是,在javax.

  • 使用javax.sound实现简单音频播放

    本文实例为大家分享了javax.sound实现简单音频播放的具体代码,供大家参考,具体内容如下 /** * @see * @author Al_assad yulinying_1994@outlook.com * @date 2016年11月17日 下午6:27:59 * @version V1.0 * Description: 简易音频播放器(只支持AU,RA,WAV) * 在不使用JMF的情况下快速实现音频播放 * */ import javax.sound.sampled.*; impor

  • java实现大文件分割与合并的实例代码

    复制代码 代码如下: package com.test; import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.FileNotFoundException;  import java.io.FileReader;  import java.io.FileWriter;  import java.io.IOException;  import java.util.Collections;  im

  • Java使用IO流实现音频的剪切和拼接

    需求: 使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件 思路(以两首歌为例): 第一首歌有一个输入流对象bis1.第二首歌有一个输入流对象bis2,他们公用一条输出流对象bos(在选择构造方法的时候选择含有布尔类型参数的那个),待第一首歌剪切完成后,在此基础上追加第二首歌的"高潮部分". 实现代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream;

  • java实现音频文件播放功能

    本文实例为大家分享了java实现音频文件的播放功能的具体代码,供大家参考,具体内容如下 实现思路 1.首先获取音频文件的地址,然后通过IO流读取音频文件,加缓冲区,实现Player类的对象. 2.Player类主要用于播放器的初始化,以及通过它来实现一些音视频文件的播放,这个类需要手动去网上下载,然后添加路径到我们Eclipse的library中. 3.Player类有两种方法比较常用,play()方法和close()方法,前者用于启动音频文件,后者用于退出音频文件的播放,这两个方法我们在使用的

  • java读取wav文件(波形文件)并绘制波形图的方法

    本文实例讲述了java读取wav文件(波形文件)并绘制波形图的方法.分享给大家供大家参考.具体如下: 因为最近有不少网友询问我波形文件读写方面的问题,出于让大家更方便以及让代码能够得到更好的改进,我将这部分(波形文件的读写)代码开源在GitHub上面. 地址为https://github.com/sintrb/WaveAccess/,最新的代码.例子.文档都在那上面,我会在我时间精力允许的前提下对该项目进行维护,同时也希望对这方面有兴趣的网友能够加入到该开源项目上. 以下内容基本都过期了,你可以

  • java实现切割wav音频文件的方法详解【附外部jar包下载】

    本文实例讲述了java实现切割wav音频文件的方法.分享给大家供大家参考,具体如下: import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.MultimediaInfo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import j

  • java音频播放示例分享(java如何播放音频)

    这是一份精简后的代码,能够支持的格式十分有限. 复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java.io.IOException; import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound

  • Java实现多个wav文件合成一个的方法示例

    本文实例讲述了Java实现多个wav文件合成一个的方法.分享给大家供大家参考,具体如下: 前面一篇介绍了java切割wav音频文件的方法,这里再给出合并多个wav音频文件的方法. package com.cmos.nomsapp.utils.wavmeger; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; impor

  • 代码分析JAVA中PCM人声音频变声处理

    项目中需要用到对PCM人声音频数据进行变声处理.苦苦挣扎了一周终于找到了纯Java实现的一套框架--TarsosDSP.功能非常强大!可以实时音频处理!当然我只用到了对文件处理.实际上逻辑是一样的 TarsosDSP的GitHub地址:https://github.com/JorenSix/TarsosDSP 将它整合至自己的项目工程. 具体Java工具类代码: /** * 变声 * @param rawPcmInputStream 原始PCM数据输入流 * @param speedFactor

随机推荐