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

本文深入探讨了Java开发中的关键技术,包括文件操作、IO流处理、properties文件管理等核心内容,提供了实用的代码示例及高效解决方案。

——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);   
                             }

                         }
                 }
    }




}
内容概要:本文围绕间歇性光伏出力条件下48V直流母线电压的稳定控制储能系统双向充放电的闭环调控体系展开深入研究,系统探讨了光伏阵列非线性输出特性锂离子电池储能系统在离网直流微网中的能量均衡建模方法及分层控制策略。通过Simulink平台构建完整的光伏储能直流系统仿真模型,涵盖PV阵列、Boost DC-DC变换器、负载、双向DC-DC变换器及电池系统等关键组件,实现了最大功率点跟踪(MPPT)储能系统的协同控制,有效应对光照波动引起的功率供需失衡问题。研究采用双PI闭环控制、模型预测控制(MPC)等多种先进控制算法,显著提升了系统的动态响应速度直流母线电压稳定性,并实现了储能系统在削峰填谷中的优化运行,对于增强离网微网的供电可靠性能源利用效率具有重要理论价值和工程意义。; 适合人群:具备电力电子、新能源系统或自动控制等相关领域基础知识的研究生、科研人员,以及从事微电网、光伏储能系统开发设计的工程技术人员。; 使用场景及目标:① 构建适用于离网场景的光伏储能系统Simulink仿真模型;② 实现间歇性光照条件下48V直流母线电压的精确稳定控制储能系统的双向能量管理;③ 研究MPPT控制储能充放电策略之间的协同机制,提升系统在复杂工况下的运行稳定性鲁棒性;④ 为微电网能量管理系统的设计、优化性能验证提供可靠的理论依据和技术支撑。; 阅读建议:建议结合文中所述的Simulink仿真模型控制算法,亲自动手实践建模仿真全过程,重点关注MPPT控制策略的实现、双向DC-DC变换器的设计以及电压外环电流内环构成的双闭环控制结构的参数整定,并通过设置不同的光照强度变化曲线和负载投切工况,全面测试和评估系统的动态响应能力控制性能。
内容概要:本文围绕面向离网直流微网的光伏储能一体化系统展开研究,重点在于系统的分层建模最大功率点跟踪(MPPT)和储能双向充放电的协同控制机理。通过Simulink仿真平台构建包含光伏阵列、Boost升压电路、双向DC-DC变换器、锂离子电池及负载的整体系统模型,提出一种能够应对光照温度扰动的多模块耦合建模方法和双级电力电子协同调控策略。研究聚焦于解决离网条件下光伏出力间歇性导致的功率供需失衡问题,通过MPPT实时捕获光伏最大功率,并结合储能系统的双向充放电能力实现“削峰填谷”,从而维持直流母线电压稳定。文中详细阐述了各控制环节的设计思路实现方式,并通过仿真验证了所提分层控制策略在提升系统稳定性、能量利用效率和动态响应性能方面的有效性。; 适合人群:具备电力电子、新能源发电或自动化相关背景,熟悉Simulink/MATLAB仿真工具,从事微电网、光伏储能系统控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习离网直流微网中光伏储能系统的集成建模方法;② 掌握MPPT储能双向充放电协同控制的策略设计仿真实现;③ 研究如何通过分层控制解决由环境扰动引起的微网功率不平衡和电压波动问题;④ 为相关课题的仿真验证和技术方案设计提供参考。; 阅读建议:在学习过程中,应结合Simulink模型,深入理解各子模块(如MPPT算法、双向DC-DC控制器、电池模型)的工作原理及其接口关系,重点关注控制策略的协同逻辑参数整定,并通过修改仿真条件(如光照强度、负载变化)来观察系统动态响应,以加深对理论分析的理解。
内容概要:本文档介绍了基于Python代码实现的并_离网风光互补制氢合成氨系统容量-调度优化分析,旨在通过复现相关研究,构建融合风能、太阳能、氢能合成氨生产的综合能源系统模型,开展系统容量配置运行调度的联合优化研究。研究综合考虑可再生能源出力的波动性、电解水制氢效率、合成氨工艺的能耗特性,以及系统在并网离网模式间的灵活切换等关键因素,建立以最小化系统全生命周期综合成本或最大化能源利用率为优化目标的数学模型,并采用先进的优化算法进行求解,最终实现系统在经济性、可靠性可持续性之间的协同优化。; 适合人群:具备一定电力系统、能源工程、化工过程或优化算法基础,从事新能源系统规划、综合能源管理、低碳技术绿色燃料生产等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展风光储氢氨多能互补系统的建模仿真分析;②研究并网离网混合运行模式下的能源协调调度策略;③优化系统关键设备(如风机、光伏、电解槽、合成反应器、储氢罐)的容量配置方案,以提升系统整体经济性能源自给能力;④为绿氢、绿色合成氨等清洁能源项目的可行性论证工程设计提供理论依据和技术参考; 阅读建议:建议读者结合文档中提供的Python代码详细的优化模型,利用实际气象负荷数据进行复现实验,深入理解目标函数的构建逻辑、多维度约束条件(如功率平衡、设备容量、运行状态换)的设定方法以及主流求解器(如CPLEX、Gurobi)的调用技巧,并可在此基础上进一步拓展至碳排放评估、多目标优化(如成本-减排权衡)或不确定性优化(如考虑风光出力预测误差)等前沿研究方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值