美文网首页
java——IO讲解文件切割与配置文件

java——IO讲解文件切割与配置文件

作者: 这颗螺丝钉姓赵 | 来源:发表于2017-03-29 15:56 被阅读0次

    文件切割:

    package com.zhaoqian.transstream;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.management.RuntimeErrorException;
    
    public class Demo4 {
    
        private static final int ONE_M = 1048576;  // 1024*1024 1M
        private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    
        public static void main(String[] args) throws IOException {
            // 源文件
            File srcf = new File("D:"+File.separator+"Demo"+File.separator+"1.jpg");
            
            File partf = new File("F:"+File.separator+"PartFiles");
    
            splitFile(srcf,partf);
        }
    
        public static void splitFile(File srcf, File partf) throws IOException {
            
            // 健壮性判断
            if (!(srcf.exists() && srcf.isFile())) {
                throw new RuntimeException("源文件不存在或不是文件");
            }
            
            if (!partf.exists()) {
                partf.mkdirs();
            }
            // 使用字节读取流和源文件关联
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcf));
        
            // 明确目的,目的文件有多个,值创建引用
            FileOutputStream fos = null;
            
            // 定义缓冲区 1M
            byte[] buf = new byte[ONE_M];
            
            int len = 0;
            
            // 编号
            int index = 1;
            // 读取
            while((len = bis.read(buf))!=-1){
                // 创建输出流,只要满足了缓冲区大小,碎片数据确定,直接往碎片文件中写
                fos = new FileOutputStream(new File(partf,(index++)+".part"));
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                bos.write(buf, 0, len);
                
                // 关闭输出流
                bos.close();
                
            }
            
            /*
             *  将源文件以及切割的信息保存起来一并发送
             *  
             *      源文件名称(文件类型)
             *      切割碎片的个数
             *  将这些文件单独封装到一个文件中(配置文件)。
             * */
            
            String filename = srcf.getName();
            
            int page = index;
            
            // 创建一个输出流
            fos = new FileOutputStream(new File(partf,"my.partconfig"));
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            
            // 配置文件
            bos.write(("filename="+filename+LINE_SEPARATOR).getBytes());
            bos.write(("page="+Integer.toString(page)).getBytes());
            
            
            bos.close();
            bis.close();
            
        }
    
    }
    
    

    使用Properties配置文件\

    package com.zhaoqian.transstream;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    public class Demo5 {
    
        public static void main(String[] args) throws IOException {
            // 解析配置文件的信息
            File configFile = new File("F:"+File.separator+"PartFiles"+File.separator+"my.partconfig");
        
    //      readConfigFile(configFile);
    //      readConfigFile_2(configFile);
            readConfigFile_3();
        }
        
        /*
         *  保存到流中的方法Properties
         * */ 
        public static void readConfigFile_3() throws IOException {
            Properties prop = new Properties();
            
            prop.setProperty("狗娃", "23");
            prop.setProperty("海娃", "48");
            
            File configFile = new File("F:"+File.separator+"PartFiles"+File.separator+"2.partconfig");
            
            FileWriter fw = new FileWriter(configFile);
            
            // 使用store方法
            prop.store(fw, "info");
            
            fw.close();
        }
    
        /*
         * 流的加载
         * */
        public static void readConfigFile_2(File configFile) throws IOException {
            
            FileReader fr = new FileReader(configFile);
            
            Properties prop = new Properties();
            
            // 使用Properties集合中的load方法,将流中的数据加载集合中,原理和readConfigFile(configFile);一样。
        
            prop.load(fr);
            System.out.println(prop); // 测试数据
            
            fr.close();
        }
    
        public static void readConfigFile(File configFile) throws IOException {
            // 读取一行,按照=对文本切割
            BufferedReader bufr = new BufferedReader(new FileReader(configFile));
            
            String line = null;
            
            /*
             *  用Map集合存储配置文件中的信息
             *  在Map集合中和IO技术结合的集合对象:Properties(继承HashaTable),它里面存储的键值都是字符串,通常这个集合
             *  就用于配置文件的操作。
             * */ 
            Map<String, String> map = new HashMap<String,String>(); 
            
            
            while((line = bufr.readLine()) != null){
                // 截取字符串
                String[] arr = line.split("=");
            }
            bufr.close();
        }
    
    }
    
    

    切割与配置文件:

    package com.zhaoqian.transstream;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.util.Properties;
    
    public class Demo6 {
    
        private static final int ONE_M = 1048576;
        private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    
        /**
         * 文件切割与配置文件
         * @param args
         */
        public static void main(String[] args) throws Exception{
            // 源文件
            File fy = new File("D:"+File.separator+"Demo"+File.separator+"1.jpg");
            
            // 目的文件夹
            File file = new File("F:"+File.separator+"PartFiles");
            
            splitFile(fy,file);
        }
        
        public static void splitFile(File fy, File file) throws Exception{
                    // 健壮性判断
                    if (!(fy.exists() && fy.isFile())) {
                        throw new RuntimeException("源文件不存在或不是文件");
                    }
                    
                    if (!file.exists()) {
                        System.out.println("文件不存在");
                        file.mkdirs();
                    }
                    
                    // 使用字节流读取文件(输入流)
                    BufferedInputStream bf = new BufferedInputStream(new FileInputStream(fy));
                    
                    FileOutputStream fo = null;
                    
                    // 定义一个1M的缓冲区
                    byte[] by = new byte[ONE_M];
                    
                    int len = 0;
                    int index = 1; // 用来控制文件名编号
                    
                    while((len = bf.read(by)) != -1){
                        fo = new FileOutputStream(new File(file,(index++)+".part")); // 块文件
                        BufferedOutputStream bs = new BufferedOutputStream(fo);
                        bs.write(by,0,len);
                        
                        // 关闭流
                        bs.close();
                    }
                    // 创建一个
                    Properties pro = new Properties();
                    
                    pro.setProperty("proname", fy.getName());
                    pro.setProperty("page", String.valueOf(index-1));
                    
                    File finfo = new File(file,"my.properties");
                    
                    if (!finfo.exists()) {
                        finfo.createNewFile();
                    }
                    
                    FileWriter fw = new FileWriter(finfo);
                    
                    pro.store(fw, "info"); // 把集合写入文件中,永久化保存
                    
                    fw.close();
                    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:java——IO讲解文件切割与配置文件

          本文链接:https://www.haomeiwen.com/subject/kjtyottx.html