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

FileReader和FileWriter

FileReader

使用read()方法读取单个字符,下面是如何修改使程序性能更好的过程。
第一种:处理异常方式为throws

 @Testpublic void test() throws IOException {//读取hello.txt,并显示内容// 创建文件对象File file = new File("hello.txt");// 读取数据// 输入型的字符流,用于读取数据FileReader fileReader = new FileReader(file);// 显示数据,read()读取单个字符// 方式1:
//        int data = fileReader.read();
//        while(data != -1){
//            System.out.print((char)data);
//            data = fileReader.read();
//
//        }// 方式2int data;while((data = fileReader.read()) != -1){System.out.print((char)data);}// 关闭流,否则造成内存泄漏fileReader.close(); // 由于使用到异常处理,可以看到当抛出异常之后,close可能就不能调用到这一步,所以应该用try,catch方法}

但是遇到异常就抛出了,无法进行到close(),因此使用try-catch-finally方法。

 @Testpublic void test1() {// 使用try catch finally 方式处理异常,确保流一定可以关闭// 快捷键,ctrl+T,添加外围的if等FileReader fileReader = null;try {File file = new File("hello.txt");fileReader = new FileReader(file);int data;while((data = fileReader.read()) != -1){System.out.print((char)data);}} catch (IOException e) {e.printStackTrace();} finally {try {// 更好的增加健壮性,再判断一下是否为空if (fileReader != null) fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}

在读取显示这里,还可以改进,通过每次读取多个字符存到字符数组中,较少与磁盘交互的次数。
如下所示:

  @Testpublic void test1() {// 使用try catch finally 方式处理异常,确保流一定可以关闭// 快捷键,ctrl+T,添加外围的if等FileReader fileReader = null;try {File file = new File("hello.txt");fileReader = new FileReader(file);char [] cbuffer = new char[5];int len;while((len = fileReader.read(cbuffer)) != -1){for (int i = 0; i < len; i++){ // 不是 cbuffer.lengthSystem.out.print(cbuffer[i]);}}} catch (IOException e) {e.printStackTrace();} finally {try {// 更好的增加健壮性,再判断一下是否为空if (fileReader != null) fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}

FileWriter

示例:

@Testpublic void test2() {// 读入操作// 创建文件FileWriter fw = null;try {File file = new File("write.txt");//fw = new FileWriter(file); // 覆盖文件使用的构造器fw = new FileWriter(file, true); // 现有基础上增加内容的构造器fw.write("I did do this.\n");fw.write("You are so glad.\n");} catch (IOException e) {throw new RuntimeException(e);} finally {try {if (fw != null)fw.close();} catch (IOException e) {throw new RuntimeException(e);} finally {}}}

执行步骤

  • 创建读取或写出的File类的对象
  • 创建输入流或输出流
  • 具体的读入或写出的过程
  • 关闭流资源,避免内存泄漏

图片,音频,视频是字节为单位进行存储的。不能用上面处理字符的进行操作。

FileInputStream、FileOutputStream

使用方法如下所示:

 @Testpublic void test() {FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try {// 不同于单纯的文字,实现图片的读取存放和复制// 创建相关的file类对象File srcFile = new File("test.jpg");File destFile = new File("test1.jpg");// 读入,写出fileInputStream = new FileInputStream(srcFile);fileOutputStream = new FileOutputStream(destFile);// 数据的读入和写出byte[] buffer = new byte[1024];int len;while((len = fileInputStream.read(buffer)) != -1){fileOutputStream.write(buffer, 0, len);}System.out.println("复制图片成功");} catch (IOException e) {e.printStackTrace();} finally {try {if(fileOutputStream != null)fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}try {if (fileInputStream != null)fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}

也可以使用文件流实现文本复制。
注意:

  • 字符流只能用来操作文本,不能用来处理非文本文件;
  • 对于字节流,通常用来处理非文本文件,涉及文本文件复制操作也可以使用字节流。

处理流

缓冲流

作用:提升文件读写的效率
也是在四个抽象基类之上

  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

示例:

 @Testpublic void test() {FileInputStream fis = null;FileOutputStream fos = null;BufferedInputStream bis = null;BufferedOutputStream bos = null; // 外层try {// 字节流测试File srcFile = new File("hello.txt");File destFile = new File("hello1.txt");// 创建输入输出fis = new FileInputStream(srcFile);fos = new FileOutputStream(destFile);bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);byte [] buffer = new byte[1024];int len;while((len = bis.read(buffer)) != -1){bos.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {// 关闭,先关外层,再关内层// 外层流的关闭,也会对内层流自动关闭try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}try {bis.close();} catch (IOException e) {throw new RuntimeException(e);}
//            fos.close();
//            fis.close();}}

转化流

对象流

了解数据流,只支持java基本数据类型和字符串的读写,不支持其他java对象的类型。
数据流:

  • DataInputStream
  • DataOutputStream

对象流:
ObjectInputStream
ObjectOutputStream

对象的序列化机制:
允许把内存中的Java对象转换成平台无关的二进制流,从而可以把这种二进制持久地保存在磁盘上,或通过网络将其传输到另一个网络节点,当其他程序获得了这种二进制流,就可以恢复成原来的java对象。

  • 序列化过程:ObjectOutputStream
  • 反序列化过程:ObejectInputStream

相关文章:

FileReader和FileWriter

FileReader 使用read()方法读取单个字符&#xff0c;下面是如何修改使程序性能更好的过程。 第一种&#xff1a;处理异常方式为throws Testpublic void test() throws IOException {//读取hello.txt&#xff0c;并显示内容// 创建文件对象File file new File("hello.txt…...

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第六篇-阶段总结篇】

因为马上就要进入下一个阶段&#xff0c;制作动态编辑体积纹理的模块。 但在这之前&#xff0c;要在这一章做最后一些整理。 首先&#xff0c;我们完成没完成的部分。其次&#xff0c;最后整理一下图表。最后&#xff0c;本文附上正在用的贴图 完善Shader 还记得我们之前注…...

地球村上一些可能有助于赚钱的20个思维方式

地球村上一些可能有助于赚钱的20个思维方式&#xff1a; 1. 目标导向思维&#xff1a;明确自己的财务目标&#xff0c;并制定详细、可执行的计划来逐步实现。 2. 创新思维&#xff1a;不断寻求新的商业机会和独特的解决方案&#xff0c;以在竞争激烈的市场中脱颖而出。 3. 价值…...

0基础入门matlab

目录 一、命令 二、变量命名 三、数据类型 数字 字符和字符串 矩阵 rand、randi和randn的区别&#xff1f; 元胞数组和结构体 MAGIC 结构体 四、矩阵构造、四则运算、矩阵下标 五、MATLAB逻辑与流程控制 六、MATLAB绘图 二维平面绘图 三维平面绘图 导出图片 内…...

【前端】实操tips集合

1. 关闭vue中组件名字的多词校验 (1) package.json文件中修改eslint配置 "eslintConfig": {"rules": {"vue/multi-word-component-names":"off" }}, &#xff08;2&#xff09;.eslintrc.js或者.eslintrc配置文件中进行配置 modu…...

基于Springboot+Vue 传统文化管理系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 会持续一直更新下去 有问必答 一键收藏关注不迷路 源码获取&#xff1a;https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwdjf1d 提取码: jf1d &#…...

质量漫谈一

我知道很多同学看到这类问题&#xff0c;第一反应想要去寻找的就是作为测试角色&#xff0c;应该要如何如何去做&#xff1f;但是今天这里作为质量第一篇&#xff0c;不打算按照这样单角度去写&#xff0c;这类同学可以就此打住&#xff0c;如果在意的话&#xff0c;可关注后续…...

个体化神经调控 Neurolnavigation介绍

神经调控技术包括DBS, TMS, rTMS, tDCS等等。今天主要说一下TMS。 TMS全程经颅磁刺激&#xff0c;通过对头皮放置磁场线圈&#xff0c;可以定向的往局部头皮发送脉冲信号&#xff0c;抑制局部神经元活动。 TMS的优点是精准刺激&#xff0c;tDCS的优点是刺激范围比较宽泛。近期有…...

02-RT1060 双ADC采样+eDMA传输

RT1060-双ADC+eDMA外设的配合使用 该项目是基于MIMXRT1060-EVKB官方开发板编写的驱动。 一、头文件包含介绍 #include "pin_mux.h" #include "clock_config.h" #include "board.h" #include "fsl_adc.h" #include "fsl_adc_et…...

单值集合总复习

1&#xff1a;Object类的核心方法复习 Object 是所有类【引用数据类型】的 直接 / 间接 父类 toString(): 将一个 引用数据类型的对象 转换成 String 类型 class Object{//Sun //toString()不需要参数&#xff1a;将一个对象转换成字符串 将调用者转换成字符串 public String …...

Pyside6 布局管理器(4)--- QGridLayout的使用

一、QGridLayout的介绍&#xff08;官翻&#xff09; QGridLayout 获得可用的空间&#xff08;由其父布局或 parentWidget() 提供&#xff09;&#xff0c;将其划分为行和列&#xff0c;并将其管理的每个小部件放入正确的单元格中。 列和行的行为是相同的&#xff1b;我们将…...

从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?

引言 在OpenAI DevDay发布会上&#xff0c;OpenAI再次震撼整个人工智能行业&#xff0c;为AI领域带来了重大的更新。CEO Sam Altman宣布推出了定制版本的ChatGPT&#xff0c;这意味着用户现在可以根据自己的需求打造个性化的GPT&#xff0c;并分享至GPT Store。这一消息对于受…...

「漏洞复现」BladeX企业级开发平台 tenant/list SQL 注入漏洞复现(CVE-2024-33332)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…...

基于SSM的消防物资存储系统【附源码】

基于SSM的消防物资存储系统 效果如下&#xff1a; 用户功能界面 仓库管理界面 物资入库管理界面 物资出库管理界面 物资详情管理界面 报警通知管理界面 安全检查提醒管理界面 管理员功能界面 研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网…...

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

2024-10-19&#xff0c;由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法&#xff0c;通过将常规视频转换成伪标记的多摄像机视角推荐数据集&#xff0c;有效解决了在未知领域中模型泛化能力差的问题。数据集的创建&#xff0c;为电影、电视和其他媒体…...

认识一下 Mochi-1--最新的免费开源人工智能视频模型

Genmo 是一家专注于视频生成的人工智能公司&#xff0c;该公司宣布发布 Mochi 1 的研究预览版。Mochi 1 是一种新的开源模型&#xff0c;可根据文本提示生成高质量视频&#xff0c;其性能可与 Runway 的 Gen-3 Alpha、Luma AI 的 Dream Machine、Kuaishou 的 Kling、Minimax 的…...

Spring 的事务传播机制

Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性&#xff08;Propagation&#xff09;提供了七种机制&#xff0c;以适应不同的业务需求和事务边界管理。 1. Spring 的事务传播机制的类型 &#xff08;1&#xff09;REQUIRED&#xff…...

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…...

写给自己的一些心得体会

为什么是CSDN??? 最近跑实验跑得绝望&#xff0c;感觉自己兜兜转转走了太多太多的弯路&#xff0c;我不知道这样的弯路什么时候是个尽头&#xff0c;就像在USJ排队&#xff0c;看似好像要到入口了&#xff0c;实则一转头还是无尽绵延的队伍。走了这么多弯路&#xff0c;总要…...

论文阅读(二十九):Multi-scale Interactive Network for Salient Object Detection

文章目录 Abstract1.Introduction2.Scale VariationProposed Method3.1Network Overview3.2Aggregate Interaction Module3.3 Self-Interaction Module3.4Consistency-Enhanced Loss 4.Experiments4.1Implementation Details4.2 Comparison with State-of-the-arts4.3Ablation …...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...