Java学习记录(十六):IO流(三)

缓冲流

缓冲流是一种高级流,可以理解为将基本流包装成了这种高级流,而这种高级流的特点就是将一个缓冲区放入到基本流当中,从而提高基本流的效率,但实际进行读写操作的还是基本流

下面为缓冲字节输出流和缓冲字节输入流的应用,将a文件的数据拷贝到b文件中

package com.itazhang.Demo1;import java.io.*;public class BufferStreamDemo1 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\11Codingtext\\MyIO\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\11Codingtext\\MyIO\\b.txt"));int temp;while(true){temp = bis.read();if(temp == -1){break;}bos.write(temp);}bos.close();bis.close();}
}

其实可以将缓冲区理解为一个候车室,所有需要读取或者写入的数据放入固定长度的缓冲区内,需要进行读取或者写出的时候直接从该数组中拿取就行,缓冲区其实就是底层默认创建了一个8192长度的数组,而在进行read操作时候创建的数组相当于是排队的入口,如果不创建数组进行read的话,相当于只开放了一个入口,创建lenth长度的数组的话,相当于一次性开放了lenth长度个入口 

在缓冲字节输入流的read时,同样也能创建一个数组用来存储每一次read的数据

下面是一个字节缓冲流的拷贝代码具体实现:

package com.itazhang.Demo1;import java.io.*;public class BufferStreamDemo1 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\11Codingtext\\MyIO\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\11Codingtext\\MyIO\\b.txt"));int temp;byte[] brr = new byte[1024];while(true){temp = bis.read(brr);if(temp == -1){break;}bos.write(brr,0,temp);}bos.close();bis.close();}
}

字符缓冲输入流 

创建方法与字节缓冲输入流类似,用字符缓冲输入流去包裹字符输入流

BufferedReader bf =new BufferedReader(new FileReader("D:\\11Codingtext\\MyIO\\a.txt"));

字符缓冲输入流除了他自带的缓冲区,还有一个其独特的方法也就是可以一次只读一行的方法

bf.readLine();

这个方法能只读取文件里的一行数据,实现代码如下

package com.itazhang.Demo1;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedCharStreamDemo1 {public static void main(String[] args) throws IOException {BufferedReader bf =new BufferedReader(new FileReader("D:\\11Codingtext\\MyIO\\a.txt"));//BufferedReader特有的方法,只读取一行数据readlineString temp;while(true){temp = bf.readLine();if(temp == null){break;}System.out.println(temp);}}
}

字符缓冲输出流 

该流创建方式也是bufferedwriter将基础的字符输出流Filewriter包裹,如下

BufferedWriter bw =new BufferedWriter(new FileWriter("D:\\11Codingtext\\MyIO\\b.txt"));

该流也有一个独特的输出方法,也就是换行,他有一个newline方法能在输出的时候将数据换行,也是字符缓冲输出流所特有的方法,具体代码如下:

package com.itazhang.Demo1;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedCharStreamDemo2 {public static void main(String[] args) throws IOException {BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\11Codingtext\\MyIO\\b.txt"));bw.write("我是一个测试语句");bw.newLine();bw.write("看看我换行了吗");bw.newLine();bw.close();}
}

字符缓冲流练习 

需求:将a文件里的数据通过每个字符串开头的数字,从小到大排序复制到b文件中,具体实现代码如下:

1、使用list集合存储读取的数据,并将数据通过list的sort方法进行排序,最后再写入b文件

package com.itazhang.Demo1;import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;public class Exercise2 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("D:\\11Codingtext\\MyIO\\a.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\11Codingtext\\MyIO\\b.txt"));ArrayList<String> list = new ArrayList<>();//读取数据存入集合String temp;while (true){temp = br.readLine();if(temp == null){break;}Collections.addAll(list,temp);}//利用list集合进行排序Collections.sort(list, 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;}});//写出数据到指定文件for (String s : list) {bw.write(s);bw.newLine();}bw.close();br.close();}
}

 2、使用TreeMap存储读取出来的数据,TreeMap会自动将存储的数据排序,这样就可以直接通过获取键值对再获取对应键值对的值从而将其写入b文件,具体实现代码如下

package com.itazhang.Demo1;import java.io.*;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class Exercise2Demo2 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("D:\\11Codingtext\\MyIO\\a.txt"));//创建TreeMap集合存储读取的数据,TreeMap自动将数据排序TreeMap<Integer,String> tm = new TreeMap<>();String temp;while(true){temp = br.readLine();if(temp == null){break;}tm.put(Integer.parseInt(temp.split("\\.")[0]),temp.split("\\.")[1]);}//使用entrySet将键值对取出,使用getValue方法取出对应值写入到指定文件BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\11Codingtext\\MyIO\\b.txt"));Set<Map.Entry<Integer, String>> entrySet = tm.entrySet();for (Map.Entry<Integer, String> entry : entrySet) {bw.write(entry.getValue());bw.newLine();}bw.close();br.close();}
}

字符缓冲流练习 (二)

确定一个程序执行的次数,如果前三次就提示正常使用,第四次开始提示三次免费试用已完。

这个需求显然不能将count计数器写入程序中,因为程序每次运行的时候会初始化count,这样达不到每次程序运行时count++的目的,所有将count写入文件中才是正确的写法,如下:

package com.itazhang.Demo1;import java.io.*;public class Exercise3 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("D:\\11Codingtext\\MyIO\\c.txt"));//读取数据int i = Integer.parseInt(br.readLine());i++;//进行判断使用次数是否超过3if(i<=3){System.out.println("这是第"+ i +"次使用,这次是正常使用");}else{System.out.println("这是第"+i+"次使用,已经超过使用限制");}BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\11Codingtext\\MyIO\\c.txt"));bw.write((String) (i+""));bw.close();br.close();}
}

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

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

相关文章

2024考研王道计算机408数据结构+操作系统+计算机组成原理+计算机网络

2024考研王道计算机408数据结构操作系统计算机组成原理计算机网络 链-接&#xff1a;https://pan.baidu.com/s/152XLyH64TlcLXwmU-zlAsQ?pwdr7zf 提取码&#xff1a;r7zf 信道利用率在408中经常考察到这里&#xff0c;我给大家总结一下这一类题目的做题方法以及技巧。首先&a…

全量知识系统问题及SmartChat给出的答复 之20 语义关联+词扇+叙词库 之1

Q67. 请问语义关联和词扇之间有什么关系&#xff1f; 语义关联和词扇是两种不同的概念&#xff0c;但它们之间有一定的关系。 语义关联指的是词语之间在语义上存在联系或关联&#xff0c;可以是同义关系、反义关系、上下位关系等。而词扇是指一个中心词周围所有与之相关的词语…

深度强化学习(二)

#! https://zhuanlan.zhihu.com/p/686235508 深度强化学习(二)(贝尔曼方程) 一.贝尔曼方程&#xff08;将 Q π Q_\pi Qπ​ 表示成 Q π Q_\pi Qπ​ &#xff09; Theorem :假设 R t R_t Rt​ 是 S t 、 A t 、 S t 1 S_t 、 A_t 、 S_{t1} St​、At​、St1​ 的函数。…

基于SpringBoot疫情打卡健康评测系统

基于SpringBoot疫情打卡健康评测系统~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 学生端功能效果展示 试卷表 在线考试 打卡管理 居家管理 学生返校申请管理 管理…

救命!我终于会写一份简单的产品说明书了

写一份简单的说明书其实也不简单&#xff0c;需要有前期的调研准备&#xff0c;撰写时的条框梳理&#xff0c;收尾的清晰明了。网络上有很多撰写产品说明书的方法&#xff0c;却也有一些模糊的地方&#xff0c;下面就来看看LookLook同学是怎么完成一份简单的产品说明书的。 一、…

【Python】一文详细介绍plt.rcParams 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍plt.rcParams 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x…

53. 最大子数组和(力扣LeetCode)

文章目录 53. 最大子数组和题目描述暴力&#xff08;运行超时&#xff09;贪心 53. 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组…

Nginx 反向代理与负载均衡是如何运行?

Nginx 是一个流行的开源Web服务器&#xff0c;它不仅可以用作正向代理服务器&#xff08;处理客户端请求并转发给后端服务器&#xff09;&#xff0c;还可以用作反向代理服务器和负载均衡器。以下是Nginx反向代理与负载均衡是如何运行的概述&#xff1a; 1. 反向代理配置&…

是什么原因影响到服务器的稳定性

由于现在互联网行业发展迅速&#xff0c;所以各个企业都会通过网站来宣传自己的产品和企业&#xff0c;因此企业就需要通过租用服务器来作为 自己的网站存储空间&#xff0c;所以很多企业在选择服务器的时候&#xff0c;肯定会考虑到服务器的稳定性。 服务器稳定的几个关键&…

c++ primer plus 笔记 第十六章 string类和标准模板库

string类 string自动调整大小的功能&#xff1a; string字符串是怎么占用内存空间的&#xff1f; 前景&#xff1a; 如果只给string字符串分配string字符串大小的空间&#xff0c;当一个string字符串附加到另一个string字符串上&#xff0c;这个string字符串是以占用…

Python_使用带AES的压缩算法模块PyZipper

Python_使用带AES的压缩算法模块PyZipper 一、概述二、安装 PyZipper三、创建加密的 ZIP 文件四、解压加密的 ZIP 文件五、使用注意 一、概述 PyZipper 是一个用于创建、读取和修改 ZIP 文件的 Python 库&#xff0c;支持 AES 加密&#xff0c;提供了比标准库 zipfile 更多的功…

css 用flex做成田字型

哈喽&#xff0c;各位小伙伴&#xff01;今天给大家来css控制div完成田字型样式&#xff0c;来&#xff0c;看看下面的效果图&#xff1a; 一看就知道你们想要代码了&#xff0c;不急。代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&…

芯片设计流程中的def文件

Def文件的内容 DEF (design exchange format)文件描述了特定设计中所有物理元素的精确放置和连线信息。它们通常包含&#xff1a; 标准单元的精确放置位置宏的位置电源网格的设计时钟树的设计特殊单元的布局&#xff0c;如模拟单元连线信息&#xff0c;包括信号连线和电源连线…

python基础练习 序列求和

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 求123...n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行&#xff0c;包括一个整数&#xff0c;表示123...n…

JAVA全面基础知识(第七部分)

大家好我是程序员阿存&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款&#xff0c;项目源码以及部署相关请联系存哥&#xff0c;文末附上联系信息 。 这篇文章给大家分享的是JAVA的基础知识&#xff0c; &#x1f495;&#x1f495;作者&#xff1a;程序员阿存 &…

哪里下载短视频素材?推荐几个短视频素材下载网站

当短视频行业的迅速崛起&#xff0c;剪辑影视短片的魅力无法抗拒&#xff0c;越来越多朋友爱看短视频&#xff0c;但从哪里找到高清、无水印和无字幕的短视频素材呢&#xff1f;今天&#xff0c;我将为大家推荐几个可获取短视频素材的优秀网站&#xff0c;下面让我们一起去看看…

ftl简单demo

包含&#xff1a; 遍历列表、获取列表长度、判断语句 <!DOCTYPE html> <html lang"en" xmlns"http://www.w3.org/1999/html"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content&qu…

python界面开发 - filedialog 文件选择对话框

文章目录 1. Tkinter 开发2. filedialog 文件选择对话框3. python图形界面开发3.1. Python图形界面开发——Tkinter3.2. Python图形界面开发——PyQt3.3. Python图形界面开发——wxPython3.4. Python图形界面开发—— PyGTK&#xff1a;基于GTK3.5. Python图形界面开发—— Kiv…

ImGui::SetWindowFontScale 设置局部字体大小

在ImGui中&#xff0c;ImGui::Text 是一个常用的控件&#xff0c;用于显示文字。它会根据当前的字体设置自动调整文本的大小。如果你想手动控制文本的大小&#xff0c;可以使用 ImGui::SetWindowFontScale 函数&#xff0c;该函数允许你在窗口中设置特定的字体缩放比例。 以下…

吴恩达机器学习-可选实验室:逻辑回归(Logistic Regression))

在这个不评分的实验中&#xff0c;你会探索sigmoid函数(也称为逻辑函数)探索逻辑回归;哪个用到了sigmoid函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from lab_utils_common impor…