io三个练习:

news2024/11/15 10:51:24

练习一:
使用 四种方式拷贝文件,并统计各自用时

1字节流的基本流:一次读写一个字节
2字节流的基本流:一次读写一个字节数组
3字节缓冲流:一次读写一个字节
4字节缓冲流:一次读写一个字节数组

public class Test03 {
    public static void main(String[] args) throws IOException {
        /**
         * 字节流的基本流:一次读写一个字节
         */


        File f1=new File("..\\ioDemo\\a.txt");
        File f2=new File("..\\ioDemo\\copy3.txt");
        long start = System.currentTimeMillis();
        copy(f1, f2);
        long end = System.currentTimeMillis();
        System.out.println((end-start)/1000.0+"秒");
    }

    private static void copy(File f1, File f2) throws IOException {
        //拷贝使用io
        FileInputStream fis=new FileInputStream(f1);
        FileOutputStream fos=new FileOutputStream(f2);

        int b;//read读取的返回值,十进制数
        while((b=fis.read())!=-1){
            fos.write(b);
        }


        fos.close();
        fis.close();

    }
}

public class Test04 {
    public static void main(String[] args) throws IOException {
        /**
         * 字节流的基本流:一次读写一个字节数组
         */


        File f1 = new File("..\\ioDemo\\a.txt");
        File f2 = new File("..\\ioDemo\\copy4.txt");
        long start = System.currentTimeMillis();
        copy(f1, f2);
        long end = System.currentTimeMillis();
        System.out.println((end - start) / 1000.0 + "秒");
    }

    private static void copy(File f1, File f2) throws IOException {
        //拷贝使用io
        FileInputStream fis = new FileInputStream(f1);
        FileOutputStream fos = new FileOutputStream(f2);

        byte[] bytes = new byte[1024];
        int len;//read读取的返回值,十进制数
        while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }
        fos.close();
        fis.close();
    }
}

public class Test01 {
    public static void main(String[] args) throws IOException {
        /**
         * 字节缓冲流:一次读写一个字节
         */


        

        //操作文件使用File
        File f1 = new File("..\\ioDemo\\a.txt");
        File f2 = new File("..\\ioDemo\\copy1.txt");



        long start = System.currentTimeMillis();
        copy1(f1, f2);
        long end = System.currentTimeMillis();
        System.out.println((end-start)/1000.0+"秒");



    }

    public static void copy1(File f1, File f2) throws IOException {
        //拷贝使用io
        //创建字节缓冲输入流
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f1));
        //创建字节缓冲输出流
        BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream(f2));


        int b;
        while ((b = br.read()) != -1) {
            bw.write(b);
        }
        bw.close();
        br.close();
    }
}

public class Test02 {
    public static void main(String[] args) throws IOException {
        /**
         * 字节缓冲流:一次读取一个字节数组
         */
        File f1 = new File("..\\ioDemo\\a.txt");
        File f2 = new File("..\\ioDemo\\copy2.txt");
        long start = System.currentTimeMillis();
        copy(f1, f2);
        long end = System.currentTimeMillis();
        System.out.println((end-start)/1000.0+"秒");
    }

    private static void copy(File f1, File f2) throws IOException {
        //拷贝使用io
        //创建字节缓冲输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f1));
        //创建字节缓冲输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f2));

        //读取并写入
        byte[] bytes = new byte[1024];//一次读取1024个字节
        int len;//一次读取的字节长
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }
        bos.close();
        bis.close();


    }
}

总结:以后用一次读取一个数组的方法最快

练习二:
将已经打乱的《出师表》排序,并放入新文件
csb.txt
方法一:

package csb;

import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;
import java.util.Comparator;

public class Test01 {
    public static void main(String[] args) throws IOException {
        /**
         * 1.纯文本
         * 2.出师表每段一行,可以使用字符缓冲流,的特有方法readLine
         */
        File f1 = new File("..\\ioDemo\\csb.txt");
        File f2 = new File("..\\ioDemo\\csb2.txt");
        restore(f1, f2);
    }

    private static void restore(File f1, File f2) throws IOException {
        //先用io将文本读取到内存中
        BufferedReader br = new BufferedReader(new FileReader(f1));

        //用来存读取到的文本
        ArrayList<String> list = new ArrayList<>();
        String s;
        while ((s = br.readLine()) != null) {
            //放入集合
            list.add(s);
        }
        //自定义排序排序,因为每一行的开头是数字,可先获取数字,升序排序
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int i1 = Integer.parseInt(o1.split("\\.")[0]);
                int i2 = Integer.parseInt(o2.split("\\.")[0]);
                return i1-i2;
            }
        });

        //遍历集合,放入新文件
        BufferedWriter bw = new BufferedWriter(new FileWriter(f2));
        for (String str : list) {
           bw.write(str);
           bw.newLine();//换行
        }
        bw.close();
        br.close();
    }
}

方法二:更简洁

package csb;

import 字符输出流底层.T;

import java.io.*;
import java.util.*;

public class Test02 {
    public static void main(String[] args) throws IOException {
        /**
         * 1.纯文本
         * 2.出师表每段一行,可以使用字符缓冲流,的特有方法readLine
         */
        File f1 = new File("..\\ioDemo\\csb.txt");
        File f2 = new File("..\\ioDemo\\csb2.txt");
        restore(f1, f2);
    }

    private static void restore(File f1, File f2) throws IOException {
        //先用io将文本读取到内存中
        BufferedReader br = new BufferedReader(new FileReader(f1));

        //*treeMap对于(Integer作为键时)可自动排序。数字,可作为键,汉字部分可做为值,
        TreeMap<Integer, String> map = new TreeMap<>();
        String s;
        while ((s = br.readLine()) != null) {
            //放入集合
            //注意点:因为split方法适用于正则表达式,所以使用 . 的时候要转义
            int key = Integer.parseInt(s.split("\\.")[0]);
            String value = s.split("\\.")[1];
            map.put(key, value);
        }

        //打印集合,检验是否排序
        System.out.println(map);//已排序
        //遍历集合,放入新文件
        BufferedWriter bw = new BufferedWriter(new FileWriter(f2));
        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            String num = entry.getKey().toString();//数字转字符串
            String value = entry.getValue();
            bw.write(num + "." + value);//1. ....
            bw.newLine();//换行
        }
        bw.close();
        br.close();
    }
}

排序前:
image.png
排序后:
image.png


练习三:
image.png

public class Test01 {
    public static void main(String[] args) throws IOException {

/**
* 首先记录次数可以用一个变量记录,但是这个变量不能存储在当前程序中(内存中)
* 可以存储在本地文件中,这样变量就不会随着程序的重启而重置
*/

        //创建字符缓冲输入流
        BufferedReader br = new BufferedReader(new FileReader("..\\ioDemo\\store.txt"));
        //读取数据并转成数字
        int count = Character.getNumericValue((char) br.read());//第一次获取到0
        //使用次数加1
        count++;//1
        //逻辑
        if (count <= 3) {
            System.out.println("欢迎使用软件,前三次使用免费,你已经使用" + count + "次");
        } else {
            System.out.println("你已经使用" + count + "次,请充值会员继续使用");
        }

        //创建字符缓冲输出流,把更新后的次数写入文件
        BufferedWriter bw = new BufferedWriter(new FileWriter("..\\ioDemo\\store.txt"));
        bw.write(count + "");//将次数变成字符串写入,不然将看作ascii码
        bw.close();
        br.close();
        /**
         * 注意不要将输出流创建在上面,会清空数据
         * 注意io流
         * 随用随创建
         * 随不用随关闭
         */

    }
}

//注意要先将store文件内放入初始值初始0
image.png
控制台:
image.png
image.png
image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1440338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP的连接和断开详解

目录 1.TCP基础知识 1.1.TCP 头格式 1.2.TCP协议介绍 1.3.UDP协议介绍 1.4.TCP 和 UDP 区别 1.5.TCP 和 UDP 应用场景 1.6.计算机网络相关术语&#xff08;缩写&#xff09; 2.TCP 连接建立&#xff1a;三次握手 2.1.TCP 三次握手过程 2.2.三次握手原理 2.3.异常分析…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决&#xff1a;在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

【深度学习:掌握监督学习】掌握监督学习综合指南

【深度学习&#xff1a;掌握监督学习】掌握监督学习综合指南 监督学习的定义和简要说明监督学习在人工智能中的重要性和相关性概述什么是监督学习&#xff1f;基本概念主要组件&#xff1a;输入要素和目标标签 训练监督式学习模型监督学习算法的类型分类回归每个类别中的流行算…

洞察 Electric Capital 2023 年开发者报告,找准未来 Web3 开发趋势

作者&#xff1a;Electric Capital 编译&#xff1a;TinTinLand 原文链接&#xff1a;https://www.developerreport.com/developer-report 近期&#xff0c;Electric Capital 发布了 2023 年年度加密开发者报告&#xff0c;对 818k 开源存储库中的 4.85 亿次代码提交进行分析…

C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

到目前为止&#xff0c;还没有网上有哪个文章有我如此的报文分析&#xff0c;操作实例&#xff0c;一大批都是抄来抄去&#xff0c;没有截图&#xff0c;没有说明&#xff0c;没有实例&#xff0c;有卵用呀&#xff0c;仅以此文章献给最爱的粉丝&#xff0c;希望对各位大师有些…

vue教程-介绍与使用

vue介绍 介绍 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 安装 最简单的例子就是&#xff0c;创建一个htm…

2024年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试考前必练&#xff01;安全生产模拟考试一点通每个月更新广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试题题目及答案&#xff01;多做几…

代码随想录算法训练营第二十五天 |216.组合总和III,17.电话号码的字母组合(已补充)

剪枝操作讲解&#xff1a;&#xff08;已观看&#xff09; 带你学透回溯算法-组合问题的剪枝操作&#xff08;对应力扣题目&#xff1a;77.组合&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 216.组合总和III&#xff08;已观看&#xff09; 1、题目链接&#xf…

文件上传-Webshell

Webshell简介 webshell就是以aspphpjsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做为一种网页木马后门。 攻击者可通过这种网页后门获得网站服务器操作权限&#xff0c;控制网站服务器以进行上传下载文件、查看数据库、执行命令等… 什么是木马 …

设计模式2-对象池模式

对象池模式&#xff0c;Object Pool Pattern&#xff0c;当你的应用程序需要频繁创建和销毁某种资源&#xff08;比如数据库连接、线程、socket连接等&#xff09;时&#xff0c;Object Pool 设计模式就变得很有用。它通过预先创建一组对象并将它们保存在池中&#xff0c;以便在…

压敏电阻简介

压敏电阻 原理 压敏电阻器是一种具有瞬态电压抑制功能的元件&#xff0c;可以用来代替瞬态抑制二极管、齐纳二极管和电容器的组合。压敏电阻器可以对IC及其它设备的电路进行保护&#xff0c;防止因静电放电、浪涌及其它瞬态电流&#xff08;如雷击等&#xff09;而造成对它们…

什么是GitOps

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 GitOps 改变了软件和基础设施的管理方式&#xff0c;以 Git 作为管理和自动化应用程序和基础设施整个生命周期的中心枢纽。 它建立在版本控制、协作以及持续集成和…

axios get 请求 url 转码 空格转成+,导致请求失败(前端解决)

问题 GET 请求参数&#xff1a; URL-encoded 后&#xff1a; 浏览器将空格转成了&#xff0c;导致服务报错&#xff0c;返回 400。 解决 在请求拦截器中&#xff0c;对 params 进行处理。 axios.interceptors.request.use((config) > {let url config.url;if (config…

k8s-项目部署案例

一、容器交付流程 在k8s平台部署项目流程 在K8s部署Java网站项目 DockerFile 如果是http访问&#xff0c;需要在镜像仓库配置可信任IP 三、使用工作负载控制器部署镜像 建议至少配置两个标签 一个是声明项目类型的 一个是项目名称的 继续配置属性 资源配额 健康检查 五、使…

elk之search API

写在前面 本文看下查询相关内容&#xff0c;这也是我们在实际工作中接触的最多的&#xff0c;所以有必要好好学习下&#xff01; 1&#xff1a;查询的分类 主要分为如下2类&#xff1a; 1:基于get查询参数的URI search 2&#xff1a;基于post body的request body search&am…

机器学习1一knn算法

1.基础知识点介绍 曼哈顿距离一般是比欧式距离长的除非在一维空间 拐弯的就是曼哈顿距离 Knn查看前5行数据head()&#xff0c;info看空非空 查看特征对应的类型 Head()默认前5行&#xff0c;head&#xff08;3&#xff09;就是前3行数据 Unique()可以查看分类后的结果 csv的…

《学成在线》微服务实战项目实操笔记系列(P1~P83)【上】

史上最详细《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 一、前期准备 1.1 项目介绍 P2 To C面向…

Leecode之随机链表的复制

一.题目及剖析 https://leetcode.cn/problems/copy-list-with-random-pointer/ 这个题目的意思就是拷贝一份复杂链表,难点在于它的random指针所指向的空间与拷贝下来的链表之间缺少一种联系,当然可以用遍历链表的方式通过value去找那块空间,不过时间复杂度太高. 二.思路引入 …

hook函数——useState

useState useState是React中的一个Hook函数&#xff0c;用于在函数组件中添加状态。基本使用语法如下&#xff1a; const [state, setState] useState(initialState) state&#xff1a;表示当前状态的值setState&#xff1a;更新状态的函数initialState&#xff1a;初始状态…