/*
* 文件的切割与合并练习
* 为简化程序,不对异常进行处理,全部声明抛出
*/
package sequence_input_stream;
import java.io.*;
import java.util.*;
public class FileSM {
public static void main(String[] args) throws IOException {
//文件源目录
File src = new File("C:\\Users\\Administrator\\Desktop\\file_split_merge");
//封装用于分割的文件
File filename = new File(src, "Vitas - 星星.mp3");
fileSplit(filename);
//文件分割
fileMerge(src, "Vitas - 星星2.mp3");
//文件合并
}
//文件切分方法
public static void fileSplit(File file) throws IOException{
//将文件关联到输入流
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[1024 * 1024];
//定义分片大小
int len = 0;
//用于记录所读到的字节数
int count = 1;
//标示分片
while((len = fis.read(buf)) != -1){
//简单的文件输出流操作
FileOutputStream fos = new FileOutputStream(new File(file.getParentFile(), count++ + ".segment"));
fos.write(buf, 0, len);
fos.close();
}
fis.close();
}
//文件合并方法,参数file父目录,filename合并后的文件名
public static void fileMerge(File file, String filename) throws IOException{
//定义集合,保存要合并的数据流
ArrayList<FileInputStream> inarr = new ArrayList<FileInputStream>();
//添加数据流
//
for(int i = 1; i <= 4; i++){
//
inarr.add(new FileInputStream(
//
new File("C:\\Users\\Administrator\\Desktop\\file_split_merge\\" + i + ".segment")));
//
}
//当前目录为同一文件的碎片
File[] files = file.listFiles();
for(File part : files){
inarr.add(new FileInputStream(
new File(file, part.getName())));
}
//获取集合的迭代器,用于Enumeration的使用
//final
final Iterator<FileInputStream> it = inarr.iterator();
//定义匿名Enumeration对象,要访问Iterator需要将Iterator设置为final类型
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){
@Override
public boolean hasMoreElements() {
// TODO Auto-generated method stub
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
// TODO Auto-generated method stub
return it.next();
}
};
//合并流
SequenceInputStream sis = new SequenceInputStream(en);
//定义输出流对象,关联输出文件
FileOutputStream fos =
new FileOutputStream(new File(file, filename));
//定义缓冲字节
byte[] by = new byte[1024];
int len = 0;
//循环输出
while((len = sis.read(by)) != -1){
fos.write(by, 0, len);
}
//关闭资源
sis.close();
fos.close();
}
}
相关文章
- Java读写XML文件的四种方式(DOM、SAX、JDOM、DOM4J)简述与比较
- Java的输入输出与文件读写(一)
- 数据结构与算法MOOC / 第三章 栈与队列 练习题 2:栈的基本操作
- Python文件与函数练习题
- Python自动合并Word文件同时添加分页符的方法
- STM32使用Jlink烧写与boot合并烧写的方法
- 将STM32 iap hex文件与app hex文件合并为一个hex文件
- 基于Eclipse搭建的STM32环境下的J-Flash烧写【hex/bin】文件到STM32xx开发板中的设置方法与步骤
- boke练习: @PreAuthorize authentication.name.equals的数据绑定与验证
- 【Java基础专题】IO与文件读写---Java的IO流架构