io三个练习:

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

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 {//拷贝使用ioFileInputStream 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 {//拷贝使用ioFileInputStream 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 {/*** 字节缓冲流:一次读写一个字节*///操作文件使用FileFile 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>() {@Overridepublic 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//使用次数加1count++;//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://xiahunao.cn/news/2774916.html

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

相关文章

小区创业项目推荐:小投资大回报的店铺类型

作为一位拥有5年鲜奶吧创业经验的自媒体博主&#xff0c;我深知在小区内寻找一个既小投资又能带来大回报的创业项目是多么重要。今天&#xff0c;我要为大家推荐的&#xff0c;正是这样一个项目——鲜奶吧。 一、鲜奶吧&#xff1a;小区内的健康食品新宠 随着健康饮食观念的深…

数据库切片大对决:ShardingSphere与Mycat技术解析

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据库切片大对决&#xff1a;ShardingSphere与Mycat技术解析 前言ShardingSphere与Mycat简介工作原理对比功能特性对比 前言 在数据库的舞台上&#xff0c;有两位颇受欢迎的明星&#xff0c;它们分别…

SQL注入(SQL Injection)从注入到拖库 —— 简单的手工注入实战指南精讲

基本SQL注入步骤&#xff1a; 识别目标&#xff1a;确定目标网站或应用程序存在潜在的SQL注入漏洞。收集信息&#xff1a;通过查看页面源代码、URL参数和可能的错误信息等&#xff0c;搜集与注入有关的信息。判断注入点&#xff1a;确定可以注入的位置&#xff0c;比如输入框、…

一键放置柱子护角,你get了吗?

今天写个番外篇&#xff0c;给柱子添加护角。 记得几年前刚开始做BIM的时候&#xff0c;有次做车库导视方案模型&#xff0c;记得好像是鼎伦设计的车库一体化方案&#xff0c;当时柱子护角就给了两种方案&#xff0c;而且基本上每颗柱子上都要放护角&#xff0c;然后甲方竟然要…

[职场] 市场总监的简历怎样描述工作经历 #微信#微信#其他

市场总监的简历怎样描述工作经历 市场总监是企业中负责市场营销的高级管理人员&#xff0c;其职责包括制定公司市场战略、管理市场推广活动、分析市场趋势和竞品、维护公司品牌形象等。市场总监需要具备丰富的市场经验和卓越的领导能力&#xff0c;同时还要具备较高的商业敏感度…

python智慧养老系统—养老信息服务平台vue

本论文中实现的智慧养老系统-养老信息服务平台将以管理员和用户的日常信息维护工作为主&#xff0c;主要涵盖了系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;养老资讯管理&#xff0c;养生有道管理&#xff0c;养老机构管理&#xff0c;系统管理等功能&#x…

ZooKeeper安装及配置(Windows版)

步骤&#xff1a; 1.官网下载二进制版本ZooKeeper安装包。 2.解压到你要安装的目录下 3.配置 3.1进入目录 D:\Install\apache-zookeeper-3.9.1-bin 新增两个文件夹&#xff1a;data和log 3.2 进入目录D:\Install\apache-zookeeper-3.9.1-bin\conf 复制zoo_sample.cfg文件&a…

机器学习系列——(十六)回归模型的评估

引言 在机器学习领域&#xff0c;回归模型是一种预测连续数值输出的重要工具。无论是预测房价、股票价格还是天气温度&#xff0c;回归模型都扮演着不可或缺的角色。然而&#xff0c;构建模型只是第一步&#xff0c;评估模型的性能是确保模型准确性和泛化能力的关键环节。本文…

【C语言|数据结构】数据结构顺序表

目录 一、数据结构 1.1概念 1.2总结 1.3为什么需要数据结构&#xff1f; 二、顺序表 1.顺序表的概念及结构 1.1线性表 2.顺序表分类 2.1顺序表和数组的区别 2.2顺序表的分类 2.2.1静态顺序表 2.2.1.1概念 2.2.1.2缺陷 2.2.2动态顺序表 三、动态顺序表的实现 3.1新…

macbook电脑如何永久删除app软件?

在使用MacBook的过程中&#xff0c;我们经常会下载各种App来满足日常的工作和娱乐需求。然而&#xff0c;随着时间的积累&#xff0c;这些App不仅占据了宝贵的硬盘空间&#xff0c;还可能拖慢电脑的运行速度。那么&#xff0c;如何有效地管理和删除这些不再需要的App呢&#xf…

LeetCode 200:岛屿数量(图的简化版之网格结构上的BFS、DFS)

图的BFS和DFS 首先让我们回顾一下图的BFS和DFS遍历。可以看到这种BFS和DFS板子适用于图形状&#xff0c;或者说结构已经确定&#xff0c;即我们遍历的时候只需要从根节点从上往下遍历即可&#xff0c;不用考虑这个节点有几个叶子节点&#xff0c;是否会遍历到空节点等边界情况…

打印文件pdf怎么转换成word文档?pdf转换工具推荐

有时候我们可能需要重用PDF文件中的文本内容&#xff0c;比如引用某些段落、复制粘贴特定文字或提取数据&#xff0c;通过将pdf文件转换成word&#xff0c;可以轻松地提取和重用其中的文本&#xff0c;节省时间和努力&#xff0c;那么pdf怎么转word呢&#xff1f;可以试试本文推…

Day4.

单链表 #include <head.h>typedef struct List{int value;struct List *pointe; }*list; list create_space() {list s(struct List *)malloc(sizeof(struct List)); //向堆区申请空间s->pointe NULL;//初始化s->value 0;return s; } list inserhead_list(lis…

STM32 定时器

目录 TIM 定时器定时中断 定时器外部时钟 PWM驱动LED呼吸灯&#xff08;OC&#xff09; PWM控制舵机 PWMA驱动直流电机 输入捕获模式测频率&#xff08;IC&#xff09; 输入捕获模式测占空比 编码器接口测速(编码器接口) TIM 通用定时器 高级定时器 定时器定时中断 Ti…

C#静态数组删除数组元素不改变数组长度 vs 动态数组删除数组元素改变数组长度

目录 一、使用的方法 1.对静态数组删除指定长度并不改变数长度的方法 &#xff08;1&#xff09;静态数组 &#xff08;2&#xff09;对静态数组删除元素不得改变其长度 2.对动态数组删除指定长度并改变数长度的方法 &#xff08;1&#xff09;动态数组 &#xff08;2&a…

vite项目配置根据不同的打包环境使用不同的请求路径VITE_BASE_URL,包括报错解决

vite环境配置可以看官方文档&#xff1a;环境变量和模式 | Vite 官方中文文档 创建环境配置文件 在项目根目录下面创建.env和.env.production文件&#xff0c;.env是开发环境使用的&#xff0c;.env.production是生产环境使用的。 .env文件&#xff1a; # 基本环境 VITE_APP…

[机缘参悟-154] :一个软件架构师对佛学的理解 -19- 宏大的佛教世界观、宇宙观,即系统架构:三千大千世界、佛土、三界、九地、二十五有、六道轮回

目录 一、什么是世界观 二、佛教的世界观 2.1 佛教的世界观的关注点 2.2 佛教世界观的核心要义 2.3 佛教的世界观 三、佛教的宇宙观&#xff1a;三千大千世界 3.1 佛教的宇宙观 3.2 三千大千世界 四、三界、九地、二十五有、六道 4.1 三界与三界之外 4.1.1 关于三界…

人工智能福利站,初识人工智能,图神经网络学习,第四课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

WebSocket+Http实现功能加成

WebSocketHttp实现功能加成 前言 首先&#xff0c;WebSocket和HTTP是两种不同的协议&#xff0c;它们在设计和用途上有一些显著的区别。以下是它们的主要特点和区别&#xff1a; HTTP (HyperText Transfer Protocol): 请求-响应模型&#xff1a; HTTP 是基于请求-响应模型的协…

夜天之书 #95 GreptimeDB 社群观察报告

GreptimeDB 是格睿科技&#xff08;Greptime&#xff09;公司研发的一款开源时序数据库&#xff0c;其源代码[1]在 GitHub 平台公开发布。 https://github.com/GreptimeTeam/greptimedb 我从 2022 年开始知道有 GreptimeDB 这个项目。2023 年&#xff0c;我注意到他们的 Commun…