节点流:FileReader和FileWriter

news2024/11/16 9:11:11

节点流:FileReader和FileWriter

FileReader

读取指定文件的内容,显示到控制台上

  • 方式一

        @Test
        public void test8() throws IOException{
            File file = new File("D:\\IDEA project\\OppTest\\ClassExpTest\\src\\FileAndIo\\hello.txt");
    
            FileReader fileReader = new FileReader(file);
    
            int data;
    
            while((data = fileReader.read()) != -1){
                System.out.println((char) data);
            }
            
            fileReader.close();
        }
    
  • 方式二:在方式一的基础上,进行改进,使用try-catch-finally处理异常,保证流是可以关闭的

     @Test
        public void test9(){
            FileReader fileReader = null;
            try {
                File file = new File("D:\\IDEA project\\OppTest\\ClassExpTest\\src\\FileAndIo\\hello.txt");
                fileReader = new FileReader(file);
                int data;
    
                while((data = fileReader.read()) != -1){
                    System.out.println(data);
                }
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            }finally {
                try {
                    if (fileReader != null) {
                        fileReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
  • 方式三:调用read(char[] cbuf),每次从文件中读取多个字符

        public void test10(){
            //一次性读取多个字符
    
            FileReader fileReader = null;
            try{
                File file = new File("D:\\IDEA project\\OppTest\\ClassExpTest\\src\\FileAndIo\\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++) {
                        System.out.println(cbuffer[i]);
                    }
                }
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try {
                    if(fileReader != null){
                        fileReader.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    

FileWrtier

方法 :write(String str) / write(char []cdata )

输入流,输入文件一定要存在

输出流,输出文件可以不存在,会自动创建此文件

  • 方式一

        @Test
        public void test11() {
            //创建File类的对象,指明要写出的文件名称
    
            File file = new File("info.txt");
    
            if(!file.exists()){
                file.createNewFile();
            }
            //创建输出流
    
            FileWriter fileWriter = null;
            try {
                fileWriter = new FileWriter(file);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            //写出的过程
    
            try {
                fileWriter.write("123");
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
    
            //关闭输出流
            try {
                fileWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    //重新写入信息,是否会将文件覆盖,取决于构造器的使用
    //new FileWriter(file,false/true)
    //默认为false,覆盖文件进行写入
    

FileReader/FileWriter的使用

使用步骤

  • 创建读取或写出的File类对象
  • 创建输入流或输出流
  • 具体的读入或写出操作
    • 读入 read(char [] cbuffer)
    • 写出 write(String str) / write(char [] cbuffer,0,len)
  • 关闭流资源,避免内存泄露

注意点

  • 因为涉及到流资源的关闭,所以出现异常的话,需要用try-catch-finally的方式来处理异常
  • 对于输入流来讲,要求File类的对象对应的物理磁盘上的文件必须存在,否则,会报错FileNotFoundException
  • 对于输出流来讲,File类对象对应的物理磁盘上的文件可以不存在
    • 若文件不存在,在输出的过程中,会自动创建文件,并写出数据到此文件中
    • 若文件存在,则会进行写入信息或覆盖文件
      • 使用FileWriter(File file) 或FileWriter(File file,false) 构造器创建,则会对同名文件进行覆盖操作
      • 使用FileWriter(File file,true) 输出的过程中,会在现有的文件的末尾追加写出的内容

练习

  • 练习1

    复制一份info.txt文件,命名为info_copy.txt

        @Test
        public void test12() throws IOException{
            //创建File类对象
    
            File srcFile = new File("info.txt");
            File destFile = new File("info_copy.txt");
            //创建输入流,输出流
    
            FileReader fileReader = new FileReader(srcFile);
            FileWriter fileWriter = new FileWriter(destFile);
            //数据的读入和写出的过程
    
            char []cBuffer = new char[5];
    
            int len;
            while((len = fileReader.read(cBuffer)) != -1){
                fileWriter.write(cBuffer,0,len);
            }
            //关闭流资源
            fileReader.close();
            fileWriter.close();
        }
    

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

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

相关文章

面试时问到软件开发原则,我emo了

今天去一个小公司面试&#xff0c;面试官是公司的软件总监&#xff0c;眼镜老花到看笔记本电脑困难&#xff0c;用win7的IE打开leetcode网页半天打不开&#xff0c;公司的wifi连接不上&#xff0c;用自己手机热点&#xff0c;却在笔记本电脑上找不到。还是我用自己的手机做热点…

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI&#xff1a;频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天&#xff0c;大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量&#xff0c;我们通常在家里或者机场&#xff0c;商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…

【MySQL 保姆级教学】详细讲解视图--(15)

视图 1. 为什么要有视图&#xff1f;2.视图的定义和特点3. 创建视图4. 视图的使用举例4.1 创建表并插入数据4.2 举例 5. 视图和基表之间有什么联系呢&#xff1f; 1. 为什么要有视图&#xff1f; 当我们频繁地使用用多表查询和复合查询出的结果时&#xff0c;就需要频繁的使用…

Python中的HTTP协议

文章目录 一. 网址URL二. HTTP协议1. HTTP协议的概念2. HTTP协议的作用3. HTTP请求报文与响应报文① HTTP请求报文Ⅰ. GET请求报文格式Ⅱ. GET请求报文分析Ⅲ. POST请求报文格式Ⅳ. POST请求报文分析Ⅴ. GET与POST请求报文总结 ② HTTP响应报文Ⅰ. HTTP响应报文格式Ⅱ. HTTP响应…

108. UE5 GAS RPG 实现地图名称更新和加载关卡

在这一篇里&#xff0c;我们将实现对存档的删除功能&#xff0c;在删除时会有弹框确认。接着实现获取玩家的等级和地图名称和存档位置&#xff0c;我们可以通过存档进入游戏&#xff0c;玩家在游戏中可以在存档点存储存档。 实现删除存档 删除存档需要一个弹框确认&#xff0…

DNS批量解析管理软件有什么用

在复杂的网络环境中&#xff0c;DNS批量解析管理软件犹如一把功能强大的钥匙&#xff0c;开启了高效网络管理的大门&#xff0c;为网络运营和维护带来了诸多便利。 1、对于网络服务提供商而言&#xff0c;DNS批量解析管理软件极大地提高了工作效率 传统的DNS解析管理方式在处…

IoT [remote electricity meter]

IoT [remote electricity meter] 物联网&#xff0c;远程抄表&#xff0c;电表数据&#xff0c;举个例子

sql数据库-排序查询-DQL

目录 语法 排序方式 举例 将表按年龄从小到大排序 将表按年龄从大到小排序 ​编辑 多重排序 将表按年龄升序&#xff0c;年龄相同按入职时间降序 语法 select * from 表名 order by 字段名1 排序方式1&#xff0c;字段2 排序方式2; 排序方式 升序&#xff1a;ASC&…

在spring boot工程中使用Filter时,@WebFilter 注解不生效的问题分析和解决方案

1. 问题描述 首先编写一个Filter类并通过Component放入spring容器中&#xff0c;通过实现jakarta.servlet中提供的Filter接口完成过滤器的创建&#xff0c;代码如下。 import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import org.springframework.st…

学习threejs,使用TWEEN插件实现动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PLYLoader PLY模型加…

TypeScript在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 引言 TypeScript 概述…

CTF-Crypto-简单加密

打开首页看题目 描述看起来是一段乱码&#xff0c;拉入随波逐流&#xff0c;未解决 e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA 观察字符串&#xff0c;末尾是AA&#xff0c;其中可能含有base64加密 找寻Ascll码表&#xff0c;发现A的Ascll是65&#xff0c;的Ascl…

MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能

MacOS下&#xff0c;如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能 在Mac上的Safari浏览器中&#xff0c;可以通过实况文本功能来实现图片中的文本翻译。关闭步骤具体步骤如下&#xff1a; 在浏览器地址栏&#xff0c;鼠标右击翻译按钮&#xff0c;然后点击“首选…

操作系统——虚拟存储器(含思维导图)

本教材为中国铁道出版社——操作系统&#xff08;第四版&#xff09;刘振鹏、张明、王煜著。本篇文章为第六章复习。 目录 思维导图&#xff1a; ​编辑一、虚拟存储器 1.理论基础 2.定义 二、分页虚拟存储管理 1.基本原理 2.缺页中断 3.页面置换 &#xff08;1&…

基于8.0 Update 3b 的ESXi-Arm Fling

很久没有更新过 ESXi-Arm 的版本了&#xff0c;博通旗下的 VMware 居然把它更新到了 8.0U3b。 下载地址&#xff1a;https://community.broadcom.com/flings 我准备使用离线更新&#xff0c;就没有下载 ISO&#xff0c;直接下载ESXi-Arm-Offline-Depot-2_00-dl.zip scp 上传…

python解析网页上的json数据落地到EXCEL

安装必要的库 import requests import pandas as pd import os import sys import io import urllib3 import json测试数据 网页上的数据结构如下 {"success": true,"code": "CIFM_0000","encode": null,"message": &quo…

C#桌面应用制作计算器

C#桌面应用制作简易计算器&#xff0c;可实现数字之间的加减乘除、AC按键清屏、Del按键清除末尾数字、/-按键取数字相反数、%按键使数字缩小100倍、按键显示运算结果等...... 页面实现效果 功能实现 布局 计算器主体使用Panel容器&#xff0c;然后将button控件排列放置Pane…

谷歌推出设备内置人工智能,实时向手机用户发出诈骗电话警报

Google 宣布推出适用于 Android 的新安全功能&#xff0c;可实时防御诈骗和有害应用。 这些功能由先进的设备内置 AI 提供支持&#xff0c;可在不损害隐私的情况下增强用户安全性。 这些新的安全功能首先在 Pixel 上推出&#xff0c;并将很快在更多 Android 设备上推出。 诈…

HarmonyOS ArkTs 解决流式传输编码问题

工作日志 日期&#xff1a;2024-11-15 标题&#xff1a;HarmonyOS ArkTs 解决流式传输编码问题 问题描述 问题&#xff1a;在处理流式数据的 HTTP 请求时&#xff0c;服务器返回的数据存在编码问题&#xff0c;导致数据无法正确地解码为字符串。部分数据在解码后出现了乱码…

MySQL数据库最大连接数查询及修改

MySQL数据库最大连接数查询及修改 1. 客户端连接数超出异常案例 Navicat连接异常信息如下&#xff1a; 2. 查看MySQL最大客户端连接数 通过mysql client命令登录MySQL数据库&#xff08;登录用户不受限制&#xff0c;既可以是 root管理员用户&#xff0c;也可以是常规用户&a…