字符流Reader和Writer(三)上

简介: 字符流Reader和Writer(三)

一. Writer


输出字符流,主要用于操作字符, 往文件里面写入字符。常常用其子类 FileWriter


一.一 Writer 接口方法


image.png


String 类实现了 CharSequence 接口。


一.二 FileWriter 子类


一.二.一 构造方法


一.二.一.一 方法


image.png


也是有 传入文件 和传入文件路径两种形式。 通常采用传入 文件的形式。 如果文件不存在,也同样会创建的。


一.二.一.二 演示


 @Test
    public void conTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        //传入文件
        Writer writer1=new FileWriter(file);
        String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt";
        //传入文件路径
        Writer writer2=new FileWriter(path);
    }


一.二.二 写入和关闭等方法


重写父类的方法, 主要是 write(),append() 方法。


20200617122219276.png


一.三 FileWriter 写入文件


一.三.一 write() 写入


老蝴蝶综合简化一下, 包括以前的写入单个,写入数组,换行,写入中文。


   @Test
    public void write1Test() throws  Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Writer writer=new FileWriter(file,true);
        //写入单个,会转换成字符,并不是数字。
        writer.write(65);
        //写入字符数组
        char[] chars="Hello,My Name is TwoButterfly".toCharArray();
        writer.write(chars);
        //写入字符数组的部分形式
        // writer.write(chars,0,3)
        //直接写入字符串
        writer.write("\r\n");
        writer.write("Hello,My Name is TwoButterfly");
        //写入字符串的部分形式
        //writer.write("Hello ",0,5);
        //换行
        writer.write("换行\r\n");
        //写入中文
        writer.write("新的一行");
        writer.close();
    }


运行程序,打开文件系统:


2020061712223867.png


一.三.二 append() 链式写入


    @Test
    public void appendTest() throws  Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Writer writer=new FileWriter(file,true);
        writer.append("\r\n");
        String str="我是追加写入的字符串";
        //链式写入
        writer.append(str).append("\r\n").append(str,0,3);
        writer.close();
    }


运行程序,查看 wz.txt 文件内容


20200617122245907.png


为了保持写入文件一致,通常采用 write()的形式。


二. Reader


Reader 用于读取文件,字符方式读取。 故一般只读取文本格式的文件,不用于读取图片,视频等格式文件。


二.一 Reader 接口方法


image.png


二.二 FileReader 类


二.二.一 构造方法


二.二.一.一 方法


image.png


建议传入文件。


二.二.一.二 演示


  //构造
    @Test
    public void conTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        //传入文件
        Reader reader=new FileReader(file);
        String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt";
        //传入路径
        Reader reader1=new FileReader(path);
    }


二.二.二 读取和关闭方法


主要是实现 接口 Reader 里面的 read() 方法


20200617122323738.png


二.三 Reader 读取文件内容


二.三.一 write() 读取单个字符和读取字符数组


 @Test
    public void readTest() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Reader reader=new FileReader(file);
        int c=reader.read();
        System.out.println("读取单个:"+(char)c);
       char[] chars=new char[1024];
       //读取多个到字符数组
       int len= reader.read(chars);
        System.out.println("输出内容:"+new String(chars,0,len));
    reader.close();
    }


控制台打印输出:


20200617122357394.png


发现,是没有乱码的。


二.三.二 循环读取


@Test
    public void read2Test() throws Exception{
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"wz.txt");
        Reader reader=new FileReader(file);
        StringBuilder sb=new StringBuilder();
        char[] chars=new char[1024];
        int len=-1;
        while((len= reader.read(chars))!=-1){
          String temp= new String(chars,0,len);
          sb.append(temp);
        }
        //读取多个到字符数组
        System.out.println("输出内容:"+sb.toString());
        reader.close();
    }


运行程序,控制台打印输出:


2020061712240810.png


字符方式读取,是不会存在中文乱码问题的。

相关文章
|
小程序
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
504 0
|
算法 Java C++
Java中的标号(Labels)与标签语句(Labeled Statements)深入解析
Java中的标号(Labels)与标签语句(Labeled Statements)深入解析
614 0
|
存储
从0-1实现文件下载CLI工具(1)
前言 在日常学习/生活中,下载资源时,大部分情况是通过别人分享的资源站点,找到下载入口然后触发下载。 当资源通过url传播的时候,一般也是直接打开,通过浏览器触发下载。 资深的冲浪选手,一般会用一些客户端工具(还记得Win上的各种下载器),Mac上笔者有时候会使用 NeatDownloadManager,无 🪜 时也能拥有不错的下载速度
|
NoSQL 算法 API
基于springboot+Redis的前后端分离项目(八)-【黑马点评】
好友关注&Feed流 (一)好友关注-关注和取消关注 (二)好友关注-共同关注 (三) 好友关注-Feed流实现方案 (四)好友关注-推送到粉丝收件箱 (五)好友关注-实现分页查询收邮箱
|
缓存 算法 PyTorch
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
4102 0
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
|
算法 Linux C语言
【C++】STL简介 及 string的使用
【C++】STL简介 及 string的使用
266 0
【C++要笑着学】从零开始实现日期类 | 体会代码的复用 | 提供完整代码(二)
啊,朋友们好啊。我是柠檬叶子C,上一章我们讲解了运算符重载,本篇将手把手从零开始一步步实现一个Date类,将会对每个步骤进行详细的思考和解读。
149 0
【C++要笑着学】从零开始实现日期类 | 体会代码的复用 | 提供完整代码(二)
|
NoSQL Java Redis
SpringBoot整合Redis_Jedis版(二十)上
一 Jedis 的基本使用 一.一 pom.xml 添加依赖 一.二 Jedis的连接使用 JedisTests 二. SpringBoot 整合 Jedis 使用 二.一 pom.xml 添加依赖 二.二 application.yml 配置Jedis连接信息 二.三 Jedis的连接配置 JedisConfiguration 二.四 测试使用 JedisSpringTests 三. 整合Redis的业务应用 三.一 RedisUtil 工具类
253 0
SpringBoot整合Redis_Jedis版(二十)上
|
存储 缓存 算法
熔断,限流,降级,容错,服务高可用(建议收藏)
熔断,限流,降级,容错,服务高可用(建议收藏)
1587 0
熔断,限流,降级,容错,服务高可用(建议收藏)
|
机器学习/深度学习 算法 数据可视化
ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)
ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)