zoukankan      html  css  js  c++  java
  • java 输入输出IO流 字符流 FileWriter FileReader

    为什么要使用字符流

    当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
     

    Writer

    Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
    • void write(int c) 写入单个字符。
    • void write(char[] cbuf) 写入字符数组。
    • abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分,off表示数组的开始索引,len表示写的字符个数。
    • void write(String str) 写入字符串。
    • void write(String str, int off, int len) 写入字符串的某一部分,off表示字符串的开始索引,len写的字符个数。
    • void flush() 刷新该流的缓冲。
    • void close() 关闭此流,但要先刷新它。
     

    1、FileWriter

    FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
    构造方法
    • FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象象。
    • FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。

    Reader

    Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
    • public void close() :关闭此流并释放与此流相关联的任何系统资源。
    • public int read() : 从输入流读取一个字符。如果读取到最后返回-1
    • public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。返回的是读取的长度。如果读取到最后返回-1

    2,FileReader

    FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
    构造方法
    • FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
    • FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称
    Reader常用方法:
    • 1,读取单个字符 int read():每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1
    • 2,使用字符数组读取数据,int read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回 -1
     示例读写:写
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    
    /**
     * @ClassName WriterStringToFile
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/4/17.
     */
    public class WriterStringToFile {
        public static void main(String[] args) throws IOException {
            String fileFath = "输入输出文件读写/src/test/output/writerOut.txt";
            Writer writer = new FileWriter(fileFath);
            writer.write(97);//写入字符编码
            writer.write('b'); //写入字符
            char[] chars = {'e','f'};
            writer.write(chars);
            String text = "剑门关-V哥
    " +
                    "北望剑阁一线天,
    " +
                    "遥想翼德战关前。
    " +
                    "纵使王朝风云变,
    " +
                    "雄关笑傲数千年。";
            writer.write(text);
    //        writer.flush();
            writer.close();
        }
    }
    
    

      示例读写:读

    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    /**
     * @ClassName ReaderStringFromFile
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/4/17.
     */
    public class ReaderStringFromFile {
        public static void main(String[] args) throws IOException {
            String srcPath = "输入输出文件读写/src/test/output/writerOut.txt";
            Reader fileReader = new FileReader(srcPath);
            StringBuffer text = new StringBuffer();
            char[] characters = new char[1024];
            int length;
            while ((length = fileReader.read(characters)) != -1) {
    //            System.out.println( characters);
                text.append(characters,0,length);
                System.out.println("读取到字符个数:" + length);
            }
            fileReader.close(); //关闭字符流
            System.out.println(text);
        }
    }

  • 相关阅读:
    Python学习系列之类与对象(二十三)
    面向过程和面向对象的异同点
    js 数值精确运算使用math.js
    js实现复制 、剪切功能-clipboard.min.js 示例
    css div嵌套层中button的margin-top不起作用解决方法
    IPhone中H5页面用on绑定click无效的解决方法
    This is a good start.
    element之input输入搜索联想框
    vue + element-ui 国际化实现
    async/await 处理多个网络请求同步问题
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14672155.html
Copyright © 2011-2022 走看看