黑马程序员——文件的切割与合并
来源:互联网 发布:快玩mac版 编辑:程序博客网 时间:2024/04/26 17:04
------Java培训、Android培训、java学习型博客、期待与您交流! -------
文件的切割于合并
一、知识概述:
我们在传送文件的时候,文件太大的情况下可能需要分开传送,那么就需要对文件进行切割。但切割发送给对方后,对方收到的文件是一些碎片,并不是完整的文件,对方需要对文件进行合并才能访问。
二、文件切割:
我们在学习IO流的时候会遇到这样一个对象:FileInputStream,这是一个可以操作文件的流对象。那么我们就给可以用这个对象来进行文件切割。
三、需求:
把桌面上一张图片切割成一些碎片文件放在桌面上的splitfile文件中,文件存储名以part_**.part的格式存储。
四、代码:
1、文件分割:
package it.heima;import java.io.*;public class SplitFile {public static void main(String[] args) {//创建一个文件对象,并关联需要分割的文件File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\heima.jpg");splitFile(file);}/** * 分割一个文件 * @param file 文件对象 */public static void splitFile(File file) {try {//创建文件输入流并关联需要分割的文件FileInputStream fis = new FileInputStream(file);//创建文件输出流,用于把分割后的文件写入到指定的目录中FileOutputStream fos = null;//定义一个分割缓冲区,每个缓冲区的大写是3kbyte[] buf = new byte[1024*3];int num = 0;//定义计数器,用于对文件碎片命名时使用int count = 1;//循环读取需要分割的文件while((num = fis.read(buf)) != -1) {//把缓冲区中的数据写入到分割文件中fos= new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\splitfile\\" + (count++) + ".part");fos.write(buf,0,num);fos.close();}fis.close();} catch (Exception e) {e.printStackTrace();}}}
如上代码所示,我们把桌面上一张名叫heima.jpg的图片进行了分割,每个碎片文件的大小是3kb。运行结果如图所示:
看图所知,我们把heima.jpg这张图片分割成了4个碎片文件。
五、文件合并:
五、文件合并:
同样,我们在学习流的时候遇到这样一个对象:SequenceInputStream。SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。由此可知我们可以用不同的文件出入流对象关联不对的碎片文件,然后把这写流放到SequenceInputStream中,这样就可以把这些文件输入流对象关联成一个流对象,再把这个流对象中的数字写入到一个文件中,这样就能实现文件碎片的合并了。
六、需求:
把上面分割的文件对象进行合并,并放到桌面上的mergefile文件夹中。
七、代码:
package it.heima;import java.util.*;import java.io.*;public class MergeFile {public static void main(String[] args) {merge();}/** * 文件分割 */public static void merge() {try {//创建一个专门用于存放FileInputStream文件输入流对象的list集合ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();//把关联碎片文件的流对象添加到集合中for(int x = 1; x<=4;x++) {al.add(new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\splitfile\\"+x+".part"));}//对集合迭代final Iterator it = al.iterator();//把迭代器中的对象存放当列举对象Enumeration中Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {@Overridepublic boolean hasMoreElements() {return it.hasNext();}@Overridepublic FileInputStream nextElement() {return (FileInputStream) it.next();}};//把流对象集合关联到SequenceInputStream中SequenceInputStream sis = new SequenceInputStream(en);//定义合并文件存放位置FileOutputStream fos = new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\mergefile\\merg.jpg");byte[] buf = new byte[1024];int num =0;//将碎片文件写入合并文件while((num = sis.read(buf)) != -1) {fos.write(buf, 0, num);}fos.close();sis.close();} catch (Exception e) {e.printStackTrace();}}}
八、运行结果:
九、总结:
通过以上描述,我们就可以对问价进行切割和合并了。
0 0
- 黑马程序员——文件的切割,与合并
- 黑马程序员——文件的切割与合并
- 黑马程序员—文件的切割与合并
- 黑马程序员-文件的切割与合并
- 黑马程序员-----file文件切割与合并(黑马视频)
- 《黑马程序员》 合并流之文件切割与合并的工具类
- 黑马程序员——>第二十天<io流(File-Proterties-合并流-切割文件)>
- java基础—文件的切割与合并
- java基础—文件的切割与合并
- 文件的切割与合并
- 文件的切割与合并
- 黑马程序员——第20天——IO输入与输出(File类,Properties,打印流,合并流,切割文件)
- 黑马程序员--IO流(Properties、打印流 、文件切割与合并)
- 黑马程序员------IO中合并流和切割文件
- 黑马程序员---切割文件
- 黑马程序员—异常+IO流File类+Properties+PrinWriter+合并流+切割文件+对象序列化+管道流+RandomAccessFile+操作基本数据类型的DataStre
- 黑马程序员----对象持久化、合并流与切割流
- 文件切割与合并
- (DT系列四)驱动加载中, 如何取得device tree中的属性
- HDU 5011-Game(博弈)
- 卡尔曼滤波器
- 记录1
- (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device
- 黑马程序员——文件的切割与合并
- Qt元类型(MetaType)注册门
- Windows 8.1:激活内置管理员
- linux fdisk命令使用
- 两个栈实现一个队列
- (DT系列六)devicetree中数据和 struct device有什么关系
- UVa 674 - Coin Change
- 容器类中const_iterator与const iterator区别
- C++之文件IO操作流