分割一个文件and合并一个文件(并且带有配置信息记录)

用到的知识:过滤器(FileNameFilter)

分割流:sequenceInputStream

配置流:Properties

package test;
 
 
import java.io.*;
import java.sql.SQLClientInfoException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.zip.InflaterInputStream;
 
import javax.annotation.processing.FilerException;
import javax.management.RuntimeErrorException;

import privateclass.Filterby_Name;
import privateclass.Filterby_hidden;
import privateclass.Filterby_java;
import privateclass.MyBufferedReader;
 
public class Main {
 
    private static final String space_operator = " ";
    private static final double pi = Math.PI;
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
	private static final int SIZE = 1024*1024;
    public static void main(String[] args) throws Exception {
 
    	
    	File file = new File("1.png");
    	File file2 = new File("d:\\图片分割");
    	cutting(file);
    	mergepart(file2);
    	
    	
    }
    /**
           *带有配置文件的存取文件(我们在配置文件里面存取分割了几个块和分割文件的名称)
     * @param file
     * @throws IOException
     */
	public static void cutting(File file) throws IOException {
		FileInputStream fis = new FileInputStream(file);
		byte[] buf = new byte[SIZE];
		
		int count = 1;
		int len = 0;
		FileOutputStream fos = null;
		File dirFile = new File("d:\\图片分割");
		if(!dirFile.exists())dirFile.mkdirs();
		while((len =  fis.read(buf)) != -1)
		{
			fos = new FileOutputStream(new File(dirFile,(count++) + ".part"));
			fos.write(buf,0,len);
			fos.close();
		}
		Properties prop = new Properties();
		prop.setProperty("filename", file.getName());
		prop.setProperty("count", count+"");
		fos = new FileOutputStream(new File(dirFile,count+".properties"));
		prop.store(fos, "filename + partcount");
		fos.close();
		fis.close();
		
	}
	
	public static void mergepart(File file2) throws IOException {
		/*
		 * 首先要拿到配置文件
		 * 使用过滤器
		 */
		File files[] = file2.listFiles(new Filterby_Name(".properties"));
		if(files.length != 1)
			throw new RuntimeException("主人,配置文件大于一个或没有配置文件,小可怜无能为力");
		Properties prop = new Properties();
		
		/*
		 * 获取配置文件里面的信息
		 */
		FileInputStream fis = new FileInputStream(files[0]);
		prop.load(fis);
		String name = prop.getProperty("filename");
		int count = Integer.valueOf(prop.getProperty("count"));
		File dirFiles[] = file2.listFiles(new Filterby_Name(".part"));
		
		/*
		 * 对照分割文件的数量
		 */
		
		if(dirFiles.length != count - 1)
			throw new RuntimeException("主人,文件数目对不上,小可怜无能为力");
		/*
		 * 将文件加入到list里面
		 */
		List<FileInputStream> list = new ArrayList<FileInputStream>();
		for(File file: dirFiles)
		{
			list.add(new FileInputStream(file));
		}
		
		Enumeration<FileInputStream> en = Collections.enumeration(list);
		
		/*
		 * 将文件放到一个合并流里面
		 */
		SequenceInputStream sis = new SequenceInputStream(en);
		
		FileOutputStream fos = new FileOutputStream(new File(file2,name));
		
		int len = 0;
		byte buf[] = new byte[1024];
 		while((len = sis.read(buf)) != -1)
 		{
 			fos.write(buf, 0, len);
 		}
 		sis.close();
 		fos.close();
		
	
	}
}




过滤器
package privateclass;

import java.io.File;
import java.io.FilenameFilter;
import java.util.jar.Attributes.Name;

public class Filterby_Name implements FilenameFilter {

	private String suffix;
	
	public Filterby_Name(String suffix) {
		super();
		this.suffix = suffix;
	}

	@Override
	public boolean accept(File dir, String name) {
		// TODO Auto-generated method stub
		return name.endsWith(suffix);
	}

}

  

posted @ 2019-11-09 17:26  WINDZLY  阅读(150)  评论(0编辑  收藏  举报