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;//汇不知道有多少个

		int len = 0;
		int count = 1;//记录子文件个数

		File dir = new File("D:\\patFiles");
		if(!dir.isFile()){
			dir.mkdirs();
		}

		while((len = fis.read(by))!=-1){
			fos = new FileOutputStream(new File(dir,(count++)+".part"));//自己定义文件格式
			fos.write(by,0,len);
		}
		fos.close();
		fis.close();
	}

文件合并

public static void main(String[] args) throws IOException {

		File file = new File("D:\\PartFile");
		Merge(file);
	}
	public static void Merge(File dir)throws IOException{

		ArrayList<FileInputStream> AL = new ArrayList<FileInputStream>();

		for(int i = 1;i<=7;i++){
			AL.add(new FileInputStream(new File(dir,i+".part")));
		}

		Enumeration<FileInputStream> en = Collections.enumeration(AL);
		SequenceInputStream sis = new SequenceInputStream(en);

		FileOutputStream fos = new FileOutputStream(new File(dir,"盛夏光年.mp3"));

		byte[] by = new byte[1024];
		int len = 0;
		while((len = sis.read(by))!=-1){
			fos.write(by, 0, len);
		}
		sis.close();
		fos.close();
	}

文件分割合并+配置文件

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;

public class Main
{
		private static final int SIZE = 1024 *1024;
	public static void main(String[] args) throws IOException {

		File file1 = new File("d:\\NeedSplit\\盛夏光年.mp3");
		File file2 = new File("D:\\PartFiles");
		splitFile(file1);
		Merge_1(file2);
	}

	public static void splitFile(File file) throws IOException{

		//用读取流关联文件(不确定文件格式)

		FileInputStream fis = new FileInputStream(file);//源是一个

		byte[] by = new byte[SIZE];//定义1M的缓冲区

		FileOutputStream fos = null;//汇不知道有多少个

		int len = 0;
		int count = 1;//记录子文件个数

		/*分割文件必需要记录分割文件的名称和分割处理的碎片文件的个数,方便合并
		 * 这个信息为了进行描写叙述,使用键值对的方法。所以使用Properties对象*/

		Properties pro = new Properties();

		File dir = new File("D:\\PartFiles");
		if(!dir.isFile()){
			dir.mkdirs();
		}

		while((len = fis.read(by))!=-1){
			fos = new FileOutputStream(new File(dir,(count++)+".part"));//自己定义文件格式
			fos.write(by,0,len);
			fos.close();
		}
		//将分割后文件的信息保存在pro集合中
		pro.setProperty("partCount", count+"");
		pro.setProperty("fileName", file.getName());
		fos = new FileOutputStream(new File(dir,count+".properties"));
		//将pro集合的信息存储在集合中
		pro.store(fos, "save file infmation");
		fis.close();
	}

	public static void Merge_1(File dir)throws IOException{

		//获取指定文件夹下配置文件对象
		File[] files = dir.listFiles(new SuffixFilter(".properties"));//new一个过滤器
		if(files.length!=1){
			throw new RuntimeException(dir+"该文件夹下没有properties扩展名的文件或者不唯一 ");
		}
		//记录配置文件对象
		File confile = files[0];

		//获取配置文件信息
		Properties pro = new Properties();
		FileInputStream fis = new FileInputStream(confile);//关联流对象

		pro.load(fis);//载入信息

		String filename  = pro.getProperty("fileName");//得到文件名称
		int count = Integer.parseInt(pro.getProperty("partCount"));//得到碎片个数

		//获取该文件夹下的全部碎片文件
		//定义过滤器。推断碎片文件的个数与配置信息中的碎片信息是否一致
		File[] partFiles = dir.listFiles(new SuffixFilter(".part"));
		if(partFiles.length!=(count-1)){
			throw new RuntimeException("碎片文件个数不正确,应是"+count+"个!");
		}

		//将碎片文件和流对象关联。并存储集合中
		ArrayList<FileInputStream> AL = new ArrayList<FileInputStream>();
		for(int i = 0;i<partFiles.length;i++){
			AL.add(new FileInputStream(partFiles[i]));
		}

		//将多个流合并成一个序列流
		Enumeration<FileInputStream> en = Collections.enumeration(AL);
		SequenceInputStream sis = new SequenceInputStream(en);

		//读写过程
		FileOutputStream fos = new FileOutputStream(new File(dir,filename));
		byte[] by = new byte[1024];
		int len = 0;
		while((len = sis.read(by))!=-1){
			fos.write(by, 0, len);
		}
		sis.close();
		fos.close();
	}
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-22 04:58:16

JAVA学习课第五 — IO流程(九)文件分割器合成器的相关文章

JAVA学习课第五十三届 — IO流程(七)File打靶 &amp;amp; Properties设置

一个.锻炼 深度遍历目录 深度遍历非常自然而然想到递归,而递归就非常自然的想到事实上现的底层算法是栈 对指定文件夹下列出全部内容(包括子文件夹的内容) PS:建议不要遍历C盘 import java.io.*; public class Main { public static void main(String[] args) throws IOException { File dir = new File("D:\\ACM集训"); ListAllDemo(dir,0); } pub

JAVA学习课第五十八届 — GUI

GUI Graghical User Interface(图形用户接口) java为GUI提供的对象都存在java.awt和java.swing包中 Java的GUI做的的确干只是C++等.不打算浪费过多的时间在这上面 一个简单的窗口演示 public static void main(String[] args){ Frame f = new Frame("新窗口"); f.setLocation(400, 200);//设置窗口的位置 f.setSize(500, 400);//设

第五周JAVA学习笔记(五)

将指定目录下的所有文件显示到列表框(JList)组件中, :效果图如下:                  import java.awt.BorderLayout; import java.io.File; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class kuang { public st

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8

java学习笔记(五)枚举

原文出处:http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html 在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,以

Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数

要求:统计一个文件中的英文,中文,数字,其他字符以及字符总数(此随笔以txt文件为例) import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; /** * 将一个文件中英文,中文,数字,其

JAVA学习第十五课(多态及其基本应用)

多态: 面向对象的第三个特征,定义:某类事物存在多种形态,比如,函数就具备多态性,同名的一个函数,它的参数列表不一样,它的存在性就不一样,还有同一个函数,放在父类和放在子类,它的存在性也就不一样. 对象也存在多态性. 例子:动物有猪.猫.狗等 猫这个对象对应的类是猫类 猫 x = new 猫(): 同时,猫还是动物的一种,也就可以把猫成为动物 动物 y = new 猫(); 动物 z = new 狗(); 动物是狗和猫集体事物中抽取出来的父类 父类引用指向了子类对象 一.概述 //对象的多态性

JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题

一.多线程下的单例设计模式 利用双重判断的形式解决懒汉式的安全问题和效率问题 //饿汉式 /*class Single { private static final Single t = new Single(); private Single(){} public static Single getInstance() { return t; } } */ //懒汉式 class Single { private static Single t = null; private Single()

java学习笔记(五)

import java.awt.BorderLayout;import java.awt.Color;import java.io.File; import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea; public class FileUtils {/** 列出指定文件夹(