当前位置: 首页 > news >正文

IO流字符流(FileReader与FileWriter)

目录

FileReader

空参read方法

带参read方法👇

FileWriter

void write(intc)        写出一个字符 

void write(string str)        写出一个字符串 

void write(string str,int off,int len)        写出一个字符串的一部分 

void write(char[] cbuf)        写出一个字符数组

void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

综合练习 

1、拷贝一个文件夹,考虑子文件夹 

2、为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。解密原理读取加密之后的文件,按照加密的规则反向操作,变成原始文件。 

3、文本文件中有以下的数据:2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9 



FileReader

操作本地文件的字符输入流

创建字符输入流对象👇

public FileReader(File file)                创建字符输入流关联本地文件
public FileReader(string pathname)                创建字符输入流关联本地文件

如果文件不存在,就直接报错。

读取数据👇

public int read()                读取数据,读到未尾返回-1

public int read(char[] buffer)                读取多个数据,读到末尾返回-1

按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数

读到文件末尾了,read方法返回-1。

释放资源👇

public int close()                释放资源/关流

空参read方法

read():默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个

在读取之后,方法的底层还会进行解码并转成十进制。最终把这个十进制作为返回值

package fileReader;import java.io.FileReader;
import java.io.IOException;public class FileReaderDemo1 {public static void main(String[] args) throws IOException {//创建对象FileReader fr=new FileReader("..\\Myio\\a.txt");int ch=0;//循环获取数据while((ch=fr.read())!=-1){System.out.print((char)ch);}//释放资源fr.close();}
}

 

带参read方法👇

read(chars):读取数据,解码,强制类型转换三步合并了,把强转之后的字符放到数组当中

package fileReader;import java.io.FileReader;
import java.io.IOException;public class FileReaderDemo2 {public static void main(String[] args) throws IOException {//创建对象FileReader fr=new FileReader("..\\Myio\\a.txt");char[] ch=new char[2];int len=0;//循环读取数据while ((len=fr.read(ch))!=-1){//把数组中的数据变成字符串再打印System.out.print(new String(ch,0,len));}//释放资源fr.close();}
}

FileWriter

操作本地文件的字符输出流

FileWriter构造方法

public FileWriter(File file)        创建字符输出流关联本地文件
public FileWriter(string pathname)        创建字符输出流关联本地文件
public FileWriter(File file,boolean append)        创建字符输出流关联本地文件,续写

public FileWriter(string pathname,boolean append)  创建字符输出流关联本地文件,续写

FileWriter成员方法

void write(int c)        写出一个字符
void write(string str)        写出一个字符串
void write(string str,int off,int len)        写出一个字符串的一部分
void write(char[] cbuf)        写出一个字符数组
void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

创建字符输出流对象

  • 参数是字符串表示的路径或者File对象都是可以的
  • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
  • 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

写数据

  • 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

释放资源

  • 每次使用完流之后都要释放资源 

void write(intc)        写出一个字符 

package fileWriter;import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo1 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("..\\Myio\\a.txt");fw.write(25105);fw.close();}
}

void write(string str)        写出一个字符串 

package fileWriter;import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo1 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("..\\Myio\\a.txt");fw.write("努力遇见更好的自己!!!");fw.close();}
}

void write(string str,int off,int len)        写出一个字符串的一部分 

package fileWriter;import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo1 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("..\\Myio\\a.txt");String str="努力努力再努力";fw.write(str,0,4);fw.close();}
}

void write(char[] cbuf)        写出一个字符数组

package fileWriter;import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo1 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("..\\Myio\\a.txt",true);char[] ch={'a','b','c','你'};fw.write(ch);fw.close();}
}

这里我打开了续写开关

void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

package fileWriter;import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo1 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("..\\Myio\\a.txt",true);char[] ch={'a','b','c','你'};fw.write(ch,0,2);fw.close();}
}

 

综合练习 

1、拷贝一个文件夹,考虑子文件夹 

package IOTest;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class ioTset1 {public static void main(String[] args) throws IOException {//拷贝一个文件夹,考虑子文件夹File start=new File("E:\\111");File end=new File("E:\\222");copyFile(start,end);}private static void copyFile(File start, File end) throws IOException {//创建 end 所表示的目录及其所有不存在的父目录end.mkdirs();//进入数据源File[] files1 = start.listFiles();for (File file : files1) {if(file.isFile()){//判断文件拷贝FileInputStream fis=new FileInputStream(file);//这里要输入的地址是end里名字为file的子级路径FileOutputStream fos=new FileOutputStream(new File(end,file.getName()));byte[] bytes=new byte[1024];int len=0;while ((len= fis.read(bytes))!=-1){fos.write(bytes,0,len);}fos.close();fis.close();}else{copyFile(file,new File(end,file.getName()));}}}
}

 

2、为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。
加密原理:
对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。
解密原理
读取加密之后的文件,按照加密的规则反向操作,变成原始文件。 

 

package IOTest;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class ioTest2 {public static void main(String[] args) throws IOException {/* 为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。解密原理读取加密之后的文件,按照加密的规则反向操作,变成原始文件。*///我们可以使用异或,异或两次就等于原来的数据FileInputStream fis=new FileInputStream("..\\Myio\\b.jpg");FileOutputStream fos=new FileOutputStream("..\\Myio\\c.jpg");int len=0;while ((len=fis.read())!=-1){//加密处理fos.write(len^2);}//释放资源fos.close();fis.close();}
}

 可以发现图片已经看不了了

如果想看这个图片的话,就得解密

package IOTest;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class ioTest2_2 {public static void main(String[] args) throws IOException {FileInputStream fis=new FileInputStream("..\\Myio\\c.jpg");FileOutputStream fos=new FileOutputStream("..\\Myio\\d.jpg");int len=0;while ((len=fis.read())!=-1){//解密处理fos.write(len^2);}//释放资源fos.close();fis.close();}}

 一运行就可以看到图片了👇

3、文本文件中有以下的数据:
2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9 

 

package IOTest;import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;public class ioTest3 {public static void main(String[] args) throws IOException {//2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9FileReader fr=new FileReader("..\\Myio\\a.txt");StringBuilder sb=new StringBuilder();int ch=0;while((ch=fr.read())!=-1){sb.append((char)ch);}fr.close();String str = sb.toString();//给数字提取出来,再进行排序String[] arrStr = str.split("-");ArrayList<Integer>list=new ArrayList<>();for (String s : arrStr) {int i=Integer.parseInt(s);list.add(i);}//排序Collections.sort(list);///写出数据FileWriter fw=new FileWriter("..\\Myio\\a.txt");for (int i = 0; i < list.size(); i++) {if(i==list.size()-1){fw.write(list.get(i)+"");}else{fw.write(list.get(i)+"-");}}fw.close();}
}

运行之后得出了想要的 结果

 


IO流的基本流就说到这里啦!!!努力遇见更好的自己!!!

相关文章:

IO流字符流(FileReader与FileWriter)

目录 FileReader 空参read方法 带参read方法&#x1f447; FileWriter void write(intc) 写出一个字符 void write(string str) 写出一个字符串 void write(string str,int off,int len) 写出一个字符串的一部分 void write(char[] cbuf) …...

使用 GPT-4 创作高考作文 2024年

使用 GPT-4 创作高考作文 2024年 使用 GPT-4 创作高考作文&#xff1a;技术博客指南 &#x1f914;✨摘要引言正文内容&#xff08;详细介绍&#xff09; &#x1f4da;&#x1f4a1;什么是 GPT-4&#xff1f;高考作文题目分析 ✍️&#x1f9d0;新课标I卷 人类智慧的进步&…...

计算机网络 期末复习(谢希仁版本)第5章

**屏蔽作用&#xff1a;**运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志&#xff0c;允许…...

CSAPP Lab01——Data Lab完成思路

陪你把想念的酸拥抱成温暖 陪你把彷徨写出情节来 未来多漫长再漫长还有期待 陪伴你 一直到 故事给说完 ——陪你度过漫长岁月 完整代码见&#xff1a;CSAPP/datalab-handout at main SnowLegend-star/CSAPP (github.com) 01 bitXor 这道题是用~和&计算x^y。 异或是两个…...

将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手

网址 https://github.com/idootop/mi-gpt 一个ts的项目&#xff0c;看样子是个纯前端的项目。 演示的挺有意思的&#xff0c;傻妞应该是魔幻手机的角色。感觉能用这个例子的&#xff0c;最少得三十而立了。 个人感觉这种项目都是整活加炫技&#xff0c;估计我要用上这东西&…...

mongodb总概

一、mongodb概述 mongodb是最流行的nosql数据库&#xff0c;由C语言编写。其功能非常丰富&#xff0c;包括: 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;格式自由&#xff0c;数据格式不固定&#xff0c;生产环境下修改结构都可以不影响程序运行;强大的查询语句…...

【设计模式】策略模式(行为型)⭐⭐

文章目录 1.概念1.1 什么是策略模式1.2 优点与缺点 2.实现方式3. Java 哪些地方用到了策略模式4. Spring 哪些地方用到了策略模式 1.概念 1.1 什么是策略模式 它允许用户在不修改现有对象的代码的情况下向对象添加新的功能&#xff1b;这种模式是通过创建一个包含该对象的包装…...

《软件定义安全》之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退&#xff0c;传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利&#xff0c;以及对降低成本的天然需求&#xff0c;企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…...

pdf文件在线压缩网站,pdf文件在线压缩工具软件

在数字化时代的今天&#xff0c;PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着PDF文件的广泛使用&#xff0c;其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间&#xff0c;而且在传输和共享过程中也往往面临诸多不便。因此&am…...

java程序100道21-30

21.定义一个接口A&#xff0c;有一个String的常量值为Java的 s&#xff0c;有void 的print()方法和String 的getInfo()方法&#xff0c;类X是A的实现类&#xff0c;类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; ​ public…...

英伟达SSD视觉算法模型训练、转换与部署

深度学习的训练和推理流程,是先采用高性能图形服务器使用深度学习框架来训练(Training)机器学习算法,研究大量的数据来学习一个特定的场景,完成后得到模型参数,再部署到终端执行机器学习推理(Inference),以训练好的模型从新数据中得出结论。 一般的深度学习项目,训练…...

智能变电站网络报文记录及故障录波分析装置

是基于Intel X86、PowerPC、FPGA等技术的高度集成化的硬件平台&#xff0c;采用了高性能CPU无风扇散热、网络数据采集、高速数据压缩存储加密等多种技术&#xff0c;实现了高性能计算、多端口同步高速数据采集、数据实时分析、大容量数据存储等功能。 ● 在满足工业标准的同时&…...

npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/

npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/ &#x1f4dc; 智能合约依赖下载失败的解决方案摘要引言正文内容1. 场景描述 &#x1f914;2. 可能原因分析2.1 包不存在或名称错误2.2 网络问题2.3 npm配置错误 3. 解决方案&#x1f6e0;️3.1 …...

Dockerfille解析

用于构建Docker镜像的文本&#xff0c;由一条条指令构成 Docker执行Dockerfile的流程 1. Docker从基础镜像执行一个容器 2. 执行一条指令并对容器进行修改 3. 执行类型Docker commit的命令添加一个新的镜像层 4. Docker再基于新的镜像执行一个新的容器 5. 执行Dockerfile中…...

定个小目标之刷LeetCode热题(14)

了解股票的都知道&#xff0c;只需要选择股票最低价格那天购入&#xff0c;在股票价格与最低价差值最大时卖出即可获取最大收益&#xff0c;总之本题只需要维护两个变量即可&#xff0c;minPrice和maxProfit&#xff0c;收益 prices[i] - minPrice,直接用代码描述如下 class …...

智慧管道管理:油气管道可视化的领先应用

通过图扑油气管道可视化技术&#xff0c;实现实时监控与数据分析&#xff0c;快速识别潜在风险&#xff0c;有效提升管道维护效率和安全性能。...

嵌入式仪器模块:示波器模块和自动化测试软件

示波器模块 • 32 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 低速模式可实现实时功率分布和整机功率检测 • 高速模式可实现信号分析和上电时序测量 应用场景 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比…...

组装服务器重装linux系统【idrac集成戴尔远程控制卡】

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…...

景区ar互动大屏游戏化体验提升营销力度

从20世纪60年代的初步构想&#xff0c;到如今全球范围内无数企业的竞相投入&#xff0c;AR增强现实技术已成为引领科技潮流的重要力量。而在这一浪潮中&#xff0c;中国的AR公司正以其独特的魅力和创新力&#xff0c;崭露头角。 中国的AR市场正在迎来前所未有的发展机遇。如今&…...

苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态

菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...