【Java基础】IO流(2) —— 字符流

【Java基础】IO流(1) —— 简介
【Java基础】IO流(2) —— 字符流
【Java基础】IO流(3) —— 字节流
【Java基础】IO流(4) —— 转换流、打印流
【Java基础】IO流(5) —— 序列流、内存流
【Java基础】IO流(6) —— 随机访问文件流、数据流

字符流

文件流

文件输出流

FileWriter

write(String str)

文件输入流

FileReader

从文本文件中读取数据:因为是文本文件所以使用字符流,又因为是读取,所以使用字符读取流

因为是文件,所以使用Reader的子类FileReader

int read( ) 一次读一个字符
int read(char [] arr) 返回的是读取的字符的个数

复制文件

import java.io.*;
class Demo9{public static void main(String[] args){FileWriter fw=null;FileReader fr=null;try{fr=new FileReader("Demo3.java");fw=new FileWriter("Demo3_copy.java");char[] arr=new char[1024];int num;while((num=fr.read(arr))!=-1){fw.write(arr,0,num);}}catch (IOException e){e.printStackTrace();}finally{if (fr!=null)try{fr.close();}catch (IOException e){e.printStackTrace();}if (fw!=null)try{fw.close();}catch (IOException e){e.printStackTrace();}}System.out.println("Hello World!");}
}

字符缓冲流

是为了提高读或写的效率,缓冲流本身不具备读或写的功能,使用缓冲流必须结合读流写流使用。

BufferedReader(Reader r):字符缓冲输入流
BufferedWriter(Writer w):字符缓冲输出流

字符缓冲输出流

newLine() 跨平台的写入换行符

//使用字符缓冲输出流向文本文件中输出数据
//1. 创建文件输出流对象和文件向关联
FileWriter fw=new FileWriter("tt.txt");
//2. 为了提高输出效率,使用字符缓冲输出流
//把需要提高效率的输出流对象作为参数传递给
BufferedWriter bw=new BufferedWriter(fw);
for (int i=1;i<=3;i++)
{bw.write("abc"+i);bw.newLine();bw.flush();
}
bw.close();//关闭缓冲流其实就是关闭写入流
字符缓冲输入流

readLine() 一次读一行,返回的一行不包括换行符

//使用字符缓冲输入流实现读取文本文件
//1. 创建文件读取流对象和文件相关联
FileReader fr=new FileReader("tt.txt");
//2.为了提高读的效率,把文件读取流对象作为参数传递给BufferedReader
BufferedReader br=new BufferedReader(fr);
String line=null;
while ((lin=br.readLine())!=null){System.out.println(line);
}
br.close();

行号LineNumberReader

FileReader fr=new FileReader("tmp.txt");
LineNumberReader bnr =new LineNumberReader(fr);
String line=null;
while((line=bnr.readLine())!=null){System.out.println(bnr.getLineNumber()+":"+line);
}
bnr.close();
模拟

模拟BufferedReader,自定义一个MyBufferedReader
提高效率,提供一个缓冲区

class MyBufferedReader{private char[] arr=new char[1024]; //缓冲区private int index; //记录缓冲区使用的下标private int count; //记录缓冲区中字符的个数private Reader r;  //具备读功能的流MyBufferedReader(Reader r){this.r=r;}//一次读一个字符的功能public int myRead()throws IOException{//判断缓冲区中是否有字符if(count==0){//读取一批count = r.read(arr);index=0;}if(count<0)return -1;int num = arr[index];index++;count--;return num;}//一次读一行的功能public String myReadLine()throws IOException{//反复调用一次读一个字符的功能,当够一行时返回StringBuilder sb=new StringBuilder();int num;while((num=myRead())!=-1){if(num=='\r')continue;else if(num=='\n')return sb.toString();elsesb.append((char)num);}return null;}public void myClose()throws IOException	{r.close();}
}class Demo1 {public static void main(String[] args) throws IOException{FileReader fr=new FileReader("tmp.txt");MyBufferedReader mbr=new MyBufferedReader(fr);String line=null;while((line=mbr.myReadLine())!=null){System.out.println(line);}mbr.myClose();}
}

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

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

相关文章

英语学习笔记20——Look at them!

Look at them! 看看他们&#xff01; 词汇 Vocabulary big a. 大的&#xff08;尺寸&#xff0c;年龄&#xff0c;音量……&#xff09; 搭配&#xff1a;big cheese 大人物    big mouth 大嘴巴&#xff08;传话的人&#xff09;    big talker 吹牛的人 例句&#xf…

【jest - 禁止自动跑test】

最近使用vscode&#xff0c;保存文件时&#xff0c;默认会触发自动跑test&#xff0c;很烦人&#xff0c;记录下配置如何配置关闭禁止自动跑jest测试。 打开setting.json&#xff0c;加上下面这句话&#xff0c;即可关闭自动跑 {"jest.runMode": "on-demand&q…

STL源码刨析:序列式容器之list

目录 1.前言 2.list的节点定义和结构 3.list的迭代器定义和结构 4.list的定义和结构 5.list的内存管理 6.list的元素操作 前言 在刨析了vector容器的源码后&#xff0c;list容器相比与vector容器&#xff0c;其元素的插入和删除较快&#xff0c;不需要对原本容器中的元…

[9] CUDA性能测量与错误处理

CUDA性能测量与错误处理 讨论如何通过CUDA事件来测量它的性能如何通过CUDA代码进行调试 1.测量CUDA程序的性能 1.1 CUDA事件 CPU端的计时器可能无法给出正确的内核执行时间CUDA事件等于是在你的CUDA应用运行的特定时刻被记录的时间戳&#xff0c;通过使用CUDA事件API&#…

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n&#xff08;n≤3000&#xff09;个单元格&#xff0c;各代表一个重要的建筑物。为了保证建筑物的安全&#xff0c;警察署给每个建筑物派了一名警察…

MFC 用Imm类库实现输入法修改输入模式

1.导入Imm类库&#xff0c;电脑里都有 #include <Imm.h> #pragma comment(lib, "imm32.lib")2.在想要的地方增加代码 HIMC himc ImmGetContext(m_hWnd);if (himc ! NULL) {ImmSetOpenStatus(himc, TRUE);ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL,…

时代终结,微软宣布淘汰VBScript;Flink漏洞被广泛利用;Grandoreiro银行木马强势回归,1500多家银行成攻击目标 | 安全周报0524

揭秘SolarMarker恶意软件&#xff1a;多层次基础设施让清除工作陷入困境 Recorded Future的新发现表明&#xff0c;SolarMarker信息窃取恶意软件背后的持续威胁行为者已经建立了一个多层次的基础设施&#xff0c;以使执法部门的清除工作变得复杂。 该公司在上周发布的一份报告…

SwiftUI中AppStorage的介绍使用

在Swift中&#xff0c;AppStorage是SwiftUI中引入的一个属性包装器&#xff0c;在这之前我们要存储一些轻量级的数据采用UserDefaults进行存取。而AppStorage用于从UserDefaults中读取值&#xff0c;当值改变时&#xff0c;它会自动重新调用视图的body属性。也就是说&#xff0…

React@16.x(11)ref

目录 1&#xff0c;介绍1.1&#xff0c;得到的结果 2&#xff0c;参数类型2.1&#xff0c;字符串&#xff08;不再推荐&#xff09;2.2&#xff0c;对象2.3&#xff0c;函数函数调用时机 3&#xff0c;注意点 1&#xff0c;介绍 reference 引用。和 vue 中的 refs 类似&#x…

IEC60870-5-104通信规约 | 报文解析 | 组织报文与解析报文(C++)

文章目录 一、IEC60870-5-104通信规约1.IEC104的报文结构2.IEC104的报文格式--I/U/S格式2.1 I帧2.2 U帧2.3 S帧 3.应用服务数据单元ASDU 二、IEC60870-5-104规约通信过程报文帧解析三、组织报文与解析报文&#xff08;C&#xff09; 一、IEC60870-5-104通信规约 IEC60870-5-104…

golang 守护进程管理

添加守护进程 vim /etc/systemd/system/xxx.service [Unit] DescriptionGo Socket Service Afternetwork.target[Service] Typesimple ExecStart/data/quwan/quwan_ws WorkingDirectory/data/quwan # 停止前发送信号 ExecStop/bin/kill -SIGTERM $MAINPID # 如果超过20s 进程…

笔记-Python lambda

在学习python的过程中&#xff0c;lambda的语法时常会使人感到困惑&#xff0c;lambda是什么&#xff0c;为什么要使用lambda&#xff0c;是不是必须使用lambda&#xff1f; 下面就上面的问题进行一下解答。 1、lambda是什么&#xff1f; 看个例子&#xff1a; 1 g lambda…

什么是GPT-4o,推荐GPT-4o的获取使用方法,使用GPT4o模型的最新方法教程(2024年5月16更新)

2024年5月最新GPT-4o模型使用教程和简介 2024年5月最新GPT-4o模型使用教程和简介 2024 年 5 月 13 日&#xff0c;openai 发布了最新的模型 GPT4o。 很多同学还不知道如何访问GPT-4、GPT-4 Turbo和GPT-4o等模型&#xff0c;这篇文章介绍如何在ChatGPT中访问GPT-4o&#xff0…

milvus索引

Milvus是一个开源的向量数据库引擎&#xff0c;旨在支持大规模向量相似度搜索和分析。索引在Milvus中扮演着非常重要的角色&#xff0c;它们用于加速向量数据的检索。下面详细介绍一下Milvus中的索引&#xff1a; 1. 索引类型 Milvus支持多种索引类型&#xff0c;每种类型都适…

无人机侦察:雷达系统概述

一、雷达基本原理 无人机侦察中的雷达系统主要基于无线电波的传播和反射原理。雷达发射机产生特定频率的电磁波&#xff0c;并通过天线以定向波束形式向空间发射。当这些电磁波遇到目标时&#xff0c;部分能量会被反射回来&#xff0c;被雷达接收机捕获。通过测量发射和接收电…

基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】

前言 该系统采用SpringBootVue前后端分离开发&#xff0c;前端是一个单独的项目&#xff0c;后端是一个单独的项目。   技术栈&#xff1a;SpringBootVueMybatisRedisMysql   开发工具&#xff1a;IDEA、Vscode   浏览器&#xff1a;Chrome   开发环境&#xff1a;JDK1…

Pytorch 笔记

执行下面这段代码后&#xff0c;为什么返回的是 2 &#xff1f; vector torch.tensor([7, 7]) vector.shape为什么返回的是 torch.Size([2])&#xff1f; 当你创建一个PyTorch张量时&#xff0c;它会记住张量中元素的数量和每个维度的大小。在你的代码中&#xff0c;torch.t…

通过 js 调起微信官方的微信支付api

通过 js 调起微信官方的微信支付api function onBridgeReady() {WeixinJSBridge.invoke(getBrandWCPayRequest, { "appId": "wx2421b1c4370ec43b", // 公众号ID&#xff0c;由商户传入 "timeStamp": "1395712654", // 时间戳&quo…

动态插入HTML内容有哪些常见用法

动态插入HTML内容的常见用法包括但不限于以下几种情况&#xff1a; 用户交互反馈&#xff1a;当用户在网页上进行某些操作时&#xff08;如点击按钮、提交表单等&#xff09;&#xff0c;可以使用JavaScript动态插入HTML内容来提供即时的反馈或结果。例如&#xff0c;当用户点…

vue3第三十五节(TS 之 泛型)

本节介绍 ts 中泛型的常用情景 1 什么是泛型 泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中&#xff0c;分别称为泛型类、泛型接口、泛型方法。 泛型使用<T>来定义类型&#xff0c;<T…