zoukankan      html  css  js  c++  java
  • 字符流

    字符流

    使用字节流读取中文文件

    1个中文:

    GBK:占用两个字节

    UTF-8:占用3个字节。

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

    字符输入流【Reader】

    java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息的内存中,它定义了字符输入流的基本共性功能方法。

    • public void close():关闭此流并释放与此流相关联的任何系统资源。
    • public int read():从输入流读取一个字符。
    • public int read(char[] cbuf):从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

    java.io.FileReader extends InputStreamReader extends Reader

    FileReader:文件字符输入流

    作用:把硬盘文件中的数据以字符的方式读取到内存中。

    构造方法:

    ​ FileReader(String fileName)

    ​ FileReader(File file)

    ​ 参数:读取文件文件的数据源

    ​ String fileName;文件的路径

    ​ File file:一个文件

    ​ FileReader构造方法的作用:

    ​ 1.创建一个FileReader对象。

    ​ 2.会把FileReader对象指向要读取的文件。

    字符输入流的使用步骤:

    1. 创建FileReader对象,构造方法中绑定要读取的数据源。
    2. 使用FileReader对象中的方法read读取文件。
    3. 释放资源。

    代码演示:

    package day7;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReader01 {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader(new File("C:\a\b.txt"));
            //读取单个字符
    //        int len = 0;
    //        while ((len = fr.read())!=-1){
    //            System.out.print((char) len);
    //        }
    
            //读取多个字符
            char[] cs =new char[1024];
            int len = 0;
            while ((len = fr.read(cs))!=-1){
                System.out.println(new String(cs,0,len));
            }
            fr.close();
        }
    }
    

    字符输出流【writer】

    java.io.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()关闭此流,但要先刷新它。

    java.io.FileWrite extends OutputStreamwriter extends writer

    FileWriter:文件字符输出流

    作用:把内存中字符数据写入到文件中。

    构造方法:

    FileWriter(File file)根据给定的File对象构造一个FileWriter对象。

    FileWriter(String fileName)根据给定的文件名构造一个FileWriter对象。

    参数:写入数据的目的地。

    String fileName:文件的路径。

    File file:是一个文件。

    构造方法的作用:

    1. 会创建一个FileWriter对象。
    2. 会根据构造方法中传递的文件/文件的路径,创建文件。
    3. 会把FileWriter对象指向创建好的文件。

    字符输出流的使用步骤(重点):

    1. 创建一个FileWriter对象,构造方法中绑定要写入数据的目的地。
    2. 使用FileReader中的方法write,吧数据写入到内存缓冲区中(字符转换为字节的过程)
    3. 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中。
    4. 释放资源(会先把内存缓冲区的数据刷新到文件中)

    写入字符数据

    代码演示:

    package day7;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class WriterDemo02 {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("C:\a\d.txt");
            fw.write("你");
            fw.write("好");
            fw.flush();
            FileReader fr = new FileReader("C:\a\d.txt");
            int len = 0;
            while((len = fr.read())!=-1){
                System.out.println((char)len);
            }
            fr.close();
        }
    }
    

    Flush方法和close方法的区别

    flush:刷新缓冲区,流对象可以继续使用。

    close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了。

    字符输出流写数据的其他方法

    • 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写的字符个数。

    代码演示:

    package day7;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo03 {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("C:\a\e.txt");
            char[] cs = {'a','b','c','d'};
            // void write(char[] cbuf)写入字符数组。
            fw.write(cs);
    
            // void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
            fw.write(cs,1,3);
    
            // void write(String str)写入字符串。
            fw.write("方舟安全团队");
            
            fw.close();
        }
    }
    

    字符输出流的续写和换行

    续写:追加写,使用两个参数的构造方法。

    FileWriter(String fileName,boolean append)

    FileWriter(File file,boolean append)

    参数:

    String fileName,File file:写入数据的目的地。

    Boolean append;续写开关,true:不会创建新的文件覆盖源文件,可以续写;false:创建新的文件覆盖源文件。

    换行:

    windows:

    linux:/n

    mac:/r

    代码演示:

    package day7;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo04 {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("C:\a\f.txt",true);
            for (int i = 0; i < 10; i++) {
                fw.write("方舟"+i+"
    ");
            }
            fw.close();
        }
    }
    
  • 相关阅读:
    vi命令文件编辑
    Linux vi/vim编辑器常用命令与用法总结
    常用vi编辑器命令行
    在AspNetMvc中使用日志面板. Logdashboard 1.1beta
    Abp中使用可视化的日志面板
    使用logdashboard进行可视化的日志追踪
    可视化面板LogDashboard使用log4net源
    LogDashboard 1.0.4 版本发布
    什么是LogDashboard?
    使用logdashboard查看可视化日志
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/13942994.html
Copyright © 2011-2022 走看看