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方法👇 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 创作高考作文:技术博客指南 🤔✨摘要引言正文内容(详细介绍) 📚💡什么是 GPT-4?高考作文题目分析 ✍️🧐新课标I卷 人类智慧的进步&…...

计算机网络 期末复习(谢希仁版本)第5章
**屏蔽作用:**运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志,允许…...

CSAPP Lab01——Data Lab完成思路
陪你把想念的酸拥抱成温暖 陪你把彷徨写出情节来 未来多漫长再漫长还有期待 陪伴你 一直到 故事给说完 ——陪你度过漫长岁月 完整代码见:CSAPP/datalab-handout at main SnowLegend-star/CSAPP (github.com) 01 bitXor 这道题是用~和&计算x^y。 异或是两个…...
将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手
网址 https://github.com/idootop/mi-gpt 一个ts的项目,看样子是个纯前端的项目。 演示的挺有意思的,傻妞应该是魔幻手机的角色。感觉能用这个例子的,最少得三十而立了。 个人感觉这种项目都是整活加炫技,估计我要用上这东西&…...

mongodb总概
一、mongodb概述 mongodb是最流行的nosql数据库,由C语言编写。其功能非常丰富,包括: 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;强大的查询语句…...
【设计模式】策略模式(行为型)⭐⭐
文章目录 1.概念1.1 什么是策略模式1.2 优点与缺点 2.实现方式3. Java 哪些地方用到了策略模式4. Spring 哪些地方用到了策略模式 1.概念 1.1 什么是策略模式 它允许用户在不修改现有对象的代码的情况下向对象添加新的功能;这种模式是通过创建一个包含该对象的包装…...

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

pdf文件在线压缩网站,pdf文件在线压缩工具软件
在数字化时代的今天,PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而,随着PDF文件的广泛使用,其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间,而且在传输和共享过程中也往往面临诸多不便。因此&am…...
java程序100道21-30
21.定义一个接口A,有一个String的常量值为Java的 s,有void 的print()方法和String 的getInfo()方法,类X是A的实现类,类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; public…...

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

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

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/ 📜 智能合约依赖下载失败的解决方案摘要引言正文内容1. 场景描述 🤔2. 可能原因分析2.1 包不存在或名称错误2.2 网络问题2.3 npm配置错误 3. 解决方案🛠️3.1 …...

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

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

智慧管道管理:油气管道可视化的领先应用
通过图扑油气管道可视化技术,实现实时监控与数据分析,快速识别潜在风险,有效提升管道维护效率和安全性能。...

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

组装服务器重装linux系统【idrac集成戴尔远程控制卡】
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…...

景区ar互动大屏游戏化体验提升营销力度
从20世纪60年代的初步构想,到如今全球范围内无数企业的竞相投入,AR增强现实技术已成为引领科技潮流的重要力量。而在这一浪潮中,中国的AR公司正以其独特的魅力和创新力,崭露头角。 中国的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层…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...