zoukankan      html  css  js  c++  java
  • 分割一个文件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);
    	}
    
    }
    

      

  • 相关阅读:
    第十二周作业
    第十二周上机练习
    第十一周作业
    第十一周上机练习
    第十周上机作业
    第九周上机练习
    第八周作业
    软件测试第一次作业
    Jsp第二次作业
    JSP第一次作业
  • 原文地址:https://www.cnblogs.com/WINDZLY/p/11826969.html
Copyright © 2011-2022 走看看