码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员—io之File的合并(SequenceInputStream)与分割

时间:2015-05-22 09:47:49      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:vector   file   程序员   

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

1:文件的合并SequenceInputStream(读取多个文件,写入一个文件中)
获取Enumeration有两种方式
1.1:Vector ve=new Vector();
Enumeration enu = ve.elements();
1.2:List lst=new ArrayList();
Iterator ite =lst.iterator();
第二种执行效率要高
2:文件的分割(读取一个文件,读一byte新建一个File)
3:io之properties常见的方法
Properties pro=new Properties();
setProperty();
getProperty();
pro.load(new FileInputStream(new File(“xxx.properties”)));
pro.store(new FileOutputStream(new File(“xxx.properties”)));

package com.itheima.www3;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;

/**
 * io  基础
 * 
 * @author myluo
 *
 */
public class IOFile2 {


    public static void main(String[] args) {
        //文件清单
        //method();
        //properties  类常见方法
        //method3();
        //method5();
        //method6();
        //method7();
        //method8();
        //method9();
    //  method10();
        method11();
    }



    //合并文件,第二中写法(枚举),list效率比vector高
    private static void method11() {
        // TODO Auto-generated method stub
             List<FileInputStream>  lst=new  ArrayList<FileInputStream>();

             for(int  i=1;i<=4;i++){
                      try {
                        lst.add(new  FileInputStream("e:/abc/"+i+".part"));

                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
             }
             //创建一个迭代器
           final  Iterator<FileInputStream>   iter=lst.iterator();

             Enumeration<FileInputStream>   enu=new  Enumeration<FileInputStream>() {

                @Override
                public boolean hasMoreElements() {
                    // TODO Auto-generated method stub
                    return iter.hasNext();
                }

                @Override
                public FileInputStream nextElement() {
                    // TODO Auto-generated method stub
                    return iter.next();
                }
            };

            //开始合并
            SequenceInputStream   sls=new   SequenceInputStream(enu);
            FileOutputStream   fos=null;
            BufferedOutputStream   bos=null;
            try {
            fos=    new  FileOutputStream(new  File("E:/abc/luo.CHM"));

            bos=new  BufferedOutputStream(fos);

            byte  []  bt=new  byte[1024];

            int  len = -1;

            try {
                while((len=sls.read(bt))!=-1){
                            bos.write(bt, 0, len); 
                }

                bos.flush();
                if(sls!=null)
                sls.close();
                if(bos!=null)
                bos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }


    //文件的切割,一个读取流,对应多个输出流
    private static void method10() {
        // TODO Auto-generated method stub
        FileInputStream   fls=null;
        FileOutputStream  fos=null;
                 try {
                fls=new  FileInputStream(new  File("C:/Users/Administrator/Desktop/JDK_API_1_6_zh_CN.CHM"));
                byte  []   bt=new   byte[1024*1024*10];
                int  len=0;
                int  num=1;
                try {
                    while((len=fls.read(bt))!=-1){
                        fos=new  FileOutputStream(new  File("e:/abc/"+num+".part"));
                        fos.write(bt,0,len);
                        fos.close();
                         num++;
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                 } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally{
                    try {
                        if(fls!=null)
                        fls.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
    }

    //(文件合并)合并流的应用,用SequenceInputStream  同时读取多个文件,多个读取流,对应一个输出流
    private static void method9() {
        // TODO Auto-generated method stub
        //创建矢量对象
        Vector   <FileInputStream>   fls=new  Vector<FileInputStream>();
        BufferedWriter  bw=null;
        SequenceInputStream   sls=null;
        try {
            fls.add(new  FileInputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\count.txt"));
        //  fls.add(new  FileInputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\luo.txt"));
            fls.add(new  FileInputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\count.properties"));
            //创建收集对象
            Enumeration<FileInputStream> elements = fls.elements();
            //合并对象流
             sls=new   SequenceInputStream(elements);

            try {
            bw=new  BufferedWriter(new  FileWriter("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\fei.txt"));
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            byte  []   bt=new  byte[1024];

            int  len=-1;
            try {
                while((len=sls.read(bt))!=-1){
                            bw.write(new  String(bt,0,len));
                            bw.flush();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(sls!=null)
                sls.close();
                if(bw!=null){
                    bw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    //打印流,常见方法PrintStream   PrintWriter
    private static void method8() {
        // TODO Auto-generated method stub
        BufferedReader  br=new  BufferedReader(new  InputStreamReader(System.in));

        PrintStream ps=null;

        try {
            ps = new  PrintStream(new  FileOutputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\count.txt"),true);

        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        String   len=null;
        try {
            while((len=br.readLine())!=null){
                ps.println(len.toUpperCase());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {

                if(br!=null)
                    br.close();
            if( ps!=null)
                ps.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }



    //应用程序计数器
    private static void method7() {
        // TODO Auto-generated method stub
        Properties  pro=new  Properties();
        File   file=new  File("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\count.properties");
        FileInputStream   fls=null;
        FileOutputStream   fos=null;
        try {
        fls=new  FileInputStream(file);
        if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
        try {
            pro.load(fls);
            System.out.println(pro);
            String   value=pro.getProperty("number");
            System.out.println(value);
            int   count=0;
        fos=new  FileOutputStream(file);
            if(value!=null){
                    count=Integer.parseInt(value);
            }

            count++;
            pro.setProperty("number", count+"");
            pro.store(fos, "");

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(fos!=null)
                fos.close();
                if(fls!=null){
                    fls.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    //properties对象的load方法   和   store方法
    private static void method6() {
        // TODO Auto-generated method stub
        Properties   pro=new  Properties();
        FileInputStream  fls=null;
        FileOutputStream  fos=null;
           try {
            fls=new  FileInputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\luo.txt");

            //properties   对象中load可以直接加载字节流   
           try {
            pro.load(fls);
            pro.setProperty("mini", "100");

            fos=new  FileOutputStream("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\luo.txt");

            pro.store(fos, "zhushi");

            System.out.println("方法1"+pro);
            pro.list(System.out);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

           } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {

                if(fos!=null)
                    fos.close();
            if( fls!=null)
                fls.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    //读取文件,把键值对保存到properties对象,演示properties的load原理用的都是字节流
    private static void method5() {
        // TODO Auto-generated method stub
          Properties   pro=new  Properties();
          // 读取src目录下luo.txt
            BufferedReader    br=null;
          try {
                        br=new  BufferedReader(new  FileReader("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\System1\\src\\luo.txt"));
                        String   len=null;
                        try {
                            while((len=br.readLine())!=null){
                                    String  []  ss=len.split("=");
                                    System.out.println(ss[0]+":"+ss[1]);
                                    pro.setProperty(ss[0], ss[1]);
                            }

                            br.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        System.out.println("pro==="+pro);
    }

    //properties  类常见方法
    private static void method3() {
        // TODO Auto-generated method stub
        //配置对象
        Properties   pro=new  Properties();
        //pro的set方法
        pro.setProperty("jack", "18");
        pro.setProperty("kaka", "20");
        System.out.println("键值对obj=="+pro);
        //get方法,根据key  ,获取value
        String value = pro.getProperty("jack");
        System.out.println("value==="+value);
        //获取properties所有的key
        Set<String>   names=pro.stringPropertyNames();
        //遍历names
        for(String   str:names){
                  System.out.println("name=="+str);
        }
    }


    private static void method() {
        File   file=new  File("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\");
        List<File>  list=new  ArrayList<File>();
        method1(file,list);
        //String   filepath="";
        File   file1=new  File("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\myluo.txt");
        method2(list,file1.toString());
       /*  System.out.println("length=="+list.size());   
         for(File  f:list){
               System.out.println("==="+f);
         }*/
    }


    /**
     * 
     * @param list    存储的文件
     * @param string   文件清单保存的路径
     * 
     */
    private static void method2(List<File> list, String string) {
        // TODO Auto-generated method stub
        BufferedWriter   bw=null;
              try {
                bw=new   BufferedWriter(new  FileWriter(string));
                for(File   lst:list){
                         bw.write(lst.getAbsolutePath());
                         bw.newLine();
                         bw.flush();
                }
              } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    if(null!=bw)
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    }
    /**
      * @param file   读取的文件
      * @param list    读取的文件保存到list集合
      */
    private static void method1(File file, List<File> list) {
        // TODO Auto-generated method stub
                 File   []   f=file.listFiles();
                 for(File  ff:f){
                         if(ff.isDirectory()){
                             //如果是文件夹,继续递归  
                             method1(ff,list);
                         }else{
                             //如果文件是后缀是.java  就保存到集合
                             if(ff.toString().endsWith(".java")){
                                 list.add(ff);   
                             }

                         }
                 }
    }




}

黑马程序员—io之File的合并(SequenceInputStream)与分割

标签:vector   file   程序员   

原文地址:http://blog.csdn.net/myadmini/article/details/45897863

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!