重学java 64.IO流 字符流

Action speak louder than words

                                        —— 24.6.5

字符输入流

一、字节流读取中文的问题

1.注意:

        字节流是万能流,这个万能更侧重于文件复制,但是尽量不要边读边看

2.原因:

        UTF-8:一个汉字占三个字节

        GBK:一个汉字占两个字节

        如果按照字节读取,每次读取的字节没有构成一个汉字的字节数,就直接输出,汉字是显示不了的

3.解决:

        将文本文档中的内容,按照字符去操作

        注意:

                ① 按照字符去操作编码也要一致,如果不一致,会乱码

                ② 按照字节流去操作,即使编码一致,边读边看也有可能会乱码

二、FileReader的介绍以及使用

字符流专门操作文本文档的,但是复制操作不要用字符流,要用字节流

1.概述

        字符输入流 —> Reader —> 是一个抽象类

                子类:FileReader

2.作用

        将文本文档中的内容读取到内存中来

3.构造

        FileReader(File file)

        FileReader(String path)

4.方法

        int read() —> 一次读取一个字符,返回的是读取字符对应的int值

        int read(char[] cbuf) —> 一次读取一个字符数组,返回的是读取个数

        int read(char[] cbuf,int off,int len) —> 一次读取一个字符数组一部分,返回的是读取个数

                chuf:读取的数组

                off:读取开始的位置

                len:读取的长度

        void close() —> 关闭资源

import java.io.FileReader;
import java.io.IOException;

public class Demo270FileMethod {
    public static void main(String[] args) throws IOException {
        method01();
        method02();

        // int read(char[] cbuf) —> 一次读取一个字符数组,返回的是读取个数
    }

    private static void method02() throws IOException {
        FileReader fr = new FileReader("AllWillBest_Java/1.txt");
        char[] buf = new char[3];
        int len;
        while ((len = fr.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
    }

    private static void method01() throws IOException {
        FileReader fr = new FileReader("AllWillBest_Java/1.txt");
        // int read() —> 一次读取一个字符,返回的是读取字符对应的int
        int len;
        while ((len = fr.read()) != -1) {
            System.out.print((char)len);
        }
        fr.close();
    }
}

三、FileWriter的介绍以及使用

1.概述:

        字符输出流 —> writer —> 抽象类
        子类:Filewriter

2.作用:

        将数据写到文件中

3.构造:

        Filewriter(File file)

        Filewriter(string fileName)

        FileWriter(string fileName,boolean append)->追加,续写

4.方法

        void write(int c) —> 一次写一个字符

        void write(char[] cbuf) —> 一次写一个字符数组

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

        void write(string str) —> 直接写一个字符串

        void close() —> 关流

5.FileWriter的刷新功能和关闭功能

        void flush() —> 将缓冲区的文件送到文件内,后续流对象才能继续使用(只刷新

        void close() —> 先刷新后关闭,后续流对象不能使用了(刷新且关闭

import java.io.FileWriter;
import java.io.IOException;

public class Demo271FileWriter {
    public static void main(String[] args) throws IOException {
        method01();
    }

    private static void method01() throws IOException {
        FileWriter fw = new FileWriter("AllWillBest_Java/1.txt");
        fw.write("我一直相信,");
        fw.write("苦难是花开的伏笔,");
        fw.write("流水不争先,争的是滔滔不绝");
        fw.flush();
        fw.close();
    }
}

四、IO流异常处理问题

1.格式

        try{

                }catch{

                 }

2.示例

import java.io.FileWriter;
import java.io.IOException;

public class Demo272Exception {
    public static void main(String[] args) {
        FileWriter fw = null;
        try{
            fw = new FileWriter("AllWillBest_Java\\2.txt");
            fw.write("一切都会好的");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 如果fw不为null,证明new出来了,需要ckose
            if(fw!=null){
                try {
                    fw.close();
                }catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

五、JDK7之后io异常处理方式

1.格式:

        try(IO对象){
                可能出现异常的代码

        }catch(异常类型 对象名){

                处理异常

        }

2.注意:

        以上格式处理IO异常,会自动关流

3.示例

import java.io.FileWriter;

public class Demo273Exception2 {
    public static void main(String[] args) {
        try(FileWriter fw = new FileWriter("AllWillBest_Java\\3.txt");){
            fw.write("我一直相信");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLAlchemy 模型中数据的错误表示

1. 问题背景 在使用 SQLAlchemy 0.6.0 版本(也曾尝试使用 0.6.4 版本)的 Pylons 应用程序中遇到了一个 SQLAlchemy ORM 问题。该问题出现在使用 psycopg2 作为数据库驱动程序、连接至 Postgresql 8.2 数据库的环境中。定义了一个 User 模型对象&#xf…

专为成长型企业打造的Java CRM系统源码:CRM客户关系管理系统技术解析与功能构建

一、序章 在激烈的市场竞争环境中,客户关系管理(CRM)系统是企业保持竞争优势、提高客户满意度、推动业务发展的核心工具。本文将深入探讨一款集成了现代技术的CRM系统,该系统基于Spring Cloud Alibaba与Spring Boot构建&#xff…

关于安装typescript后运行tsc -v命令报错问题

报错信息: tsc 不是内部或外部命令,也不是可运行的程序 或批处理文件。 没有配置环境变量,使用npm命令查看typescript的安装目录: npm config get prefix 根据控制台输出的目录,配置path环境变量 tsc -v 运行成功&…

申请医疗设备注册变更时,需要补充考虑网络安全的情况有哪些?

在申请医疗器械设备注册变更时,需要补充网络安全的情况主要包括以下几点: 网络安全功能更新:如果医疗器械的自研软件发生网络安全功能更新,或者合并网络安全补丁更新的情形,需要单独提交一份自研软件网络安全功能更新…

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

大众熟知的三大网络:电信网络、有线电视网络、计算机网络。发展最快起到核心的是计算机网络。Internet是全球最大、最重要的计算机网络。互联网:流行最广、事实上的标准译名。互连网:把许多网络通过一些路由器连接在一起。与网络相连的计算机…

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑: DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_jenkins的安装以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…

基于centos7打包当前环境的系统为iso镜像文件

1. 准备工作 1.下载安装mondo 切换到root用户,进入yum下载库 # cd /etc/yum.repos.d # wget ftp://ftp.mondorescue.org/centos/7/x86_64/mondorescue.repo 打开文件mondorescue.repo,修改gpgcheck属性为0,指定mondorescue.repo安装 # 安…

Java 8 中的 Stream API,用于处理集合数据

Java 8 引入了 Stream API,使得处理集合数据变得更加简洁和高效。Stream API 允许开发者以声明式编程风格操作数据集合,而不是使用传统的迭代和条件语句。 一、基本概念 1.1 什么是 Stream Stream 是 Java 8 中的一个新抽象,它允许对集合数…

先进制造aps专题十一 国内软件/erp行业的现状及对aps行业的启示

看到一个帖子 中国软件行业几乎全军覆没 OSC开源社区 2024-06-03 15:58 广东 刚刚网上冲浪刷到的 网友锐评:都是客户关系型公司。 知名大 V 「Fenng」评论称: 这里所谓的软件行业公司如果立刻倒闭,才能够利好中国整个行业软件生态。有个网…

【云原生】Kubernetes----RBAC用户资源权限

目录 引言 一、Kubernetes安全机制概述 二、认证机制 (一)认证方式 1.HTTPS证书认证 1.1 证书颁发 1.2 config文件 1.3 认证类型 1.4 Service Account 1.4.1 作用 1.4.2 包含内容 1.4.3 与Secret的关系 2.Bearer Tokens 3.基本认证 三、鉴…

【Java数据结构】二叉树详解(四)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2.给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 2.1第一种思路 2.2第二种思路 3.根据一棵树的前序遍历与中序遍历构造二叉树 4.根据一棵树的中序…

短视频外卖平台区域代理怎么拿?两种方法!

抖音外卖平台区域代理怎么拿?市面上只有两种途径可走。没有其他任何方法。 一是拿抖音官方区域服务商身份,第一个要求是保证金50万,公司必须还要有20个人以上的社保证明。同时还要提供企业半年的银行资金流水。如果小型公司基本是不用考虑的…

pcb实验六-元件设计

目录 一,绘制28管脚PLCC封装ATF750C-10JC元件 二,绘制变压器原理图符号,并生成各种库文件输出报表 1,绘制变压器原理图 2,添加封装 3,输出报表文件 三,绘制音乐集成芯片及LCD元件 1&…

隐马尔可夫模型

目录 1. 通信系统 2. 各种“马尔可夫”们 2.1 马尔可夫假设 2.2 马尔可夫链 2.3 隐马尔可夫模型 2.3.1 将隐马尔可夫模型应用于解码问题 2.3.2 如何训练隐马尔可夫模型 2.3.2.1 有监督的训练 2.3.2.2 无监督的训练 1. 通信系统 通信的本质就是一个【编码传输解码】的…

【C++】STL:栈和队列模拟实现

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

【设计模式深度剖析】【2】【行为型】【命令模式】| 以打开文件按钮、宏命令、图形移动与撤销为例加深理解

👈️上一篇:模板方法模式 | 下一篇:职责链模式👉️ 设计模式-专栏👈️ 文章目录 命令模式定义英文原话直译如何理解呢? 四个角色1. Command(命令接口)2. ConcreteCommand(具体命令类&…

linux进程间通讯指南-打通IPC大门,高效沟通无阻

在现代操作系统中,进程就像独立的个体,有时需要相互合作、数据共享,这就要求进程间能够高效通信。本文将为你揭开Linux进程间通信(IPC)的神秘面纱,探讨各种IPC工具的运作原理,同步机制的重要性,以及如何规避…

Ubuntu安装cuda

文章目录 前言一、安装NVIDIA驱动1.1 过程中的问题1.2 解决方法1.3 重启后出现 perform MOK management 二、安装Cuda2.1 检查是否安装显卡驱动2.2 安装Cuda2.3 验证CUDA是否安装成功 三、配置环境变量---未完2.4 图片居中加调整大学 总结 #pic_center 前言 只是为方便学习&…

淘宝扭蛋机源码解析:功能实现与技术细节

随着在线购物和娱乐的融合,淘宝扭蛋机作为一种创新的购物娱乐方式,受到了广大用户的喜爱。本文将深入解析淘宝扭蛋机的源码,探讨其功能实现与技术细节,以期为开发者们提供一些有价值的参考。 一、功能实现 1.用户登录与注册 淘宝…

win11通过网线分享网络到Ubuntu工控机

1.条件:一个能无线联网的win11,一根网线,一台Ubuntu工控机,并且使用网线连接两者 2.在win11电脑上 2.1 打开控制面板的网络和Internet 2.2 进入网络和共享中心,在左侧进入 更改适配器设置 2.3 在WLAN上右键&#xff0…