IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java learn 关于拆分(合并)文件的算法 -> 正文阅读

[数据结构与算法]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();
        }
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:27:04  更:2021-09-18 10:29:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:34:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码