java learn 关于拆分(合并)文件的算法

拆分文件始终做的一件事就是熟悉 类名以及及其方法
以下代码 未写出FileInputStream 和 FileOutputSgtream
的声明。


        FileInputStream f = null;
        FileOutputStream f2 = null;
 
        try {
            File file = new File("d:/LOLFolder/langs.model.xml");
            long count = file.length();
            int l = (int)count / 102400;
            //拆分次数
            l++;
            //最后一次
            int b = (int)count % 102400;
            f = new FileInputStream(file);
            //byte[] bytes = new byte[f.available()];
            byte[] bytes = new byte[102400];
            String path = "d:/LOLFolder/eclipse.exe-";
            for (int i = 0 ; i < l; i++){
                File f1 = new File(path + i);
                if (!f1.exists()){
                    f1.createNewFile();
                    f2 = new FileOutputStream(f1);
                    int read = f.read(bytes);
                    f2.write(bytes);
                    System.err.println(read);
//                    f.read(bytes);
//                    //len代表0要写的字节,off 代表从什么时候开始写
//                    if ((i+1)*102400 < count){
//                        f2.write(bytes,i*102400,102400);
//                    }else {
//                        f2.write(bytes,i*102400,b);
//                    }
                }
            }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (f != null){
                    f.close();
                }
                if (f2 != null){
                    f2.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

这部分代码 是借鉴的别人的 一开始自己毫无头绪 但是看了他的之后 发现是纯学过的方法调用

1、首先创建 输入输出流 之后放入try catch 里捕抓异常
2、try里面实例化FileInputStream 和 FileOutputSgtream
引用对其方法进行调用 从而实现

发现我在思考的时候有个地方忽略:
也就是——这个是字节流 那么可以直接用整数型数值放入
read(); 和 write(); 两个方法中对其相应字节大小的内容进行读取或写入 为方便读取或者写入多大的 自然获取其文件长度 存入数组 再以数组形式进行。
补充:
以read(); 和 write(); 最终得出的是文件字节大小
其内容时通过各个数据类型的数组包含 之后通过这两个方法进行操作 它们本身不含内容

 int ss=fg1.read(A);
            	System.out.println(ss);

不是具体的文件内容

也就是以下这段:

 byte[] bytes = new byte[102400];
            String path = "d:/LOLFolder/eclipse.exe-";
            for (int i = 0 ; i < l; i++){
                File f1 = new File(path + i);
                if (!f1.exists()){
                    f1.createNewFile();
                    f2 = new FileOutputStream(f1);
                    int read = f.read(bytes);
                    f2.write(bytes);
                    System.err.println(read);

l 是输出拆分文件的序号 不存在就创建 再实例化输出流 读取
每次只读取102400字节大小的文件也就到达了分割的目的 因为在这之前已经处理出具体的分割次数 只需要读取就好

合并最主要的就是用到 File型数组 记住数组不是只运用于数字 根据不同数据类型 可以利用数组的特点实现该数据类型的某些算法
示例:

 File f1 = new File("C:\\Users\\logic\\Desktop\\需求说明.docx-0");
        File f2 = new File("C:\\Users\\logic\\Desktop\\需求说明.docx-1");
        File f3 = new File("C:\\Users\\logic\\Desktop\\需求说明.docx-2");
        File f4 = new File("C:\\Users\\logic\\Desktop\\需求说明.docx-3");
        File f5 = new File("C:\\Users\\logic\\Desktop\\需求说明.docx-4");
        File file = new File("C:\\Users\\logic\\Desktop\\需求说明new.docx");
        try{
            FileOutputStream fos = new FileOutputStream(file);      
            File[] f = {f1, f2, f3, f4, f5};
            for (int i = 0; i < f.length; i++) {
                byte[] b = new byte[(int)f[i].length()];
                FileInputStream fis = new FileInputStream(f[i]);
                fis.read(b);
                fis.close();    
                fos.write(b);
                fos.flush();
                System.out.printf("把子文件:%s写出到目标文件中%n", f[i]);
            }
            fos.close();
              System.out.printf("最后目标文件的大小:%,d字节", file.length());
        }catch(IOException exception){
            exception.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值