zoukankan      html  css  js  c++  java
  • Java IO流-字符流

    2017-11-05 18:34:39

    Java中的IO流按数据类型分类分为两种,一是字节流,二是字符流。字符流的出现是为了简化文本数据的读入和写出操作。

    如果操作的文件是文本文件,那么使用字符流会大大简化操作,但是如果什么都不知道,就用字节流。

    • 字符流

    由于字节流中读取中文不是很方便,所以Java中提供了转换流,所以

    字符流 = 字节流 + 编码表(By the way,‘a’=97,‘A’=65,‘0’=48)。

    字符流也有两个抽象基类:Writer

                Reader

    * OutputStreamWriter

    OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

    每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

    为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。

    **构造方法

    **常用方法

    在写入String时不指定偏移,则写入lenth的长度。

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    
    public class Demo1 {
        public static void main(String[] args) throws IOException {
            OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream("" +
                    "E:\text.txt","GBK"));
            fout.write("你好,Java");
         fout.flush(); fout.close(); } }

     注意这里的默认编码是GBK。正如上文所言,在最后输出前,会在缓冲区进行编码,所以需要调用flush清空缓冲区,将文件输出。但是close()前会自动刷新。

     * InputSteamReader

    InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

    每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

    为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。

    **构造方法

    **常用方法

    为了简化OutputStreamWriter和InputStreamReader的初始化工作,这两个类又提供了两个子类作为便捷类。即:

    FileWriter类,初始化方法FileWriter(File file,bool append),注意FileWriter类虽然简化了构建,但是无法设置编码方式,需要使用父类OutputStreamWriter

    FileReader类,初始化方法FileReader(File file),同样如果要设定解码方式,需要使用父类InputStreamReader

     ==>同样的,字符流为了高效读写也提供了

    字符缓冲流:BufferedWriter,BufferedReader。

    * BufferedWriter

    BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

    可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

    **构造方法

    **常用方法

    import java.io.*;
    
    public class Demo1 {
        public static void main(String[] args) throws IOException {
            BufferedWriter fout = new BufferedWriter(new FileWriter(
                    "E:\text.txt"));
            fout.write("你好,Java");
            fout.close();
        }
    }
    

    * BufferedReader

    BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

    可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

    *构造方法

    **常用方法

    readline()终于出来了~ 如果已到达流末尾,则返回 null。

        @Test
        public void demo() throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(
                    "E:\text.txt"));
            int ch;
            while((ch = bufferedReader.read())!=-1)
            {
                System.out.print((char)ch);
            }
    
            bufferedReader.close();
        }
    

    ==>一种特殊的输出流,打印流PrintWriter。

    PrintWriter:向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。

    PrintStream 类不同,如果启用了自动刷新,则只有在调用 printlnprintfformat 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。

    PrintWriter打印流的特点:

                A:只有写数据的,没有读数据的。

                B:可以操作任意类型的数据

                C:可以指定是否自动刷新

                  D:可以直接使用路径进行初始化

    **构造方法

    **常用方法

     

    1. write()方法不能输出任意类型,能够输出任意类型的函数有println(),print()
    2. 如果启用了自动刷新,则只有在调用 printlnprintfformat 的其中一个方法时才可能完成此操作
    3. 构造方法中必须要选择启用自动刷新
    import java.io.FileWriter;
    import java.io.PrintWriter;
    
    public class Demo5 {
        public static void main(String[] args) throws Exception {
            PrintWriter pw = new PrintWriter(new FileWriter("E://test.txt"),
                    true);
    
            pw.println(100);
            pw.println("This is string.");
            pw.println(true);
    
            pw.close();
        }
    }
    
  • 相关阅读:
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    写在前面
    一丶Python简介
    七丶Python字典
    六丶Python列表操作
    五丶Python列表丶元组丶字典
    四丶Python运算符
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/7788153.html
Copyright © 2011-2022 走看看