[重学Java基础][Java IO流][Part.3]文件字符输入输出流

[重学Java基础][JavaIO流][Part.3]文件字符输入输出流

FileReader

概述

可以直接读入文件中字符内容的输入流 继承了InputStreamReader 是InputStreamReader 的一个包装流 功能基本是基于InputStreamReader 来实现

官方注释

/*
用于读取文件字符内容的快捷类,该类假定默认的字符编码和字符缓冲大小都是合适的。如果要自主指定这些设置的大小,构造一个基于FileInputStream的适配器InputStreamReader
FileReader用于读取字符流文件,如果要读取字节流 请使用FileInputStream
*/

源码分析

这里写图片描述

成员方法

可以看到此类的内容比较简略 仅有三个重载的构造方法 入参分别是一个文件名 一个文件对象 一个文件描述符对象

public FileReader(String fileName) throws FileNotFoundException {
    super(new FileInputStream(fileName));
}

public FileReader(File file) throws FileNotFoundException {
    super(new FileInputStream(file));
}


public FileReader(FileDescriptor fd) {
    super(new FileInputStream(fd));
}

代码示例

读入字符文件流

  FileReader fr=new FileReader("d://a.txt");

    int i=0;
    while((i=fr.read())!=-1)
    {
        System.out.print((char)i);
    }
    fr.close();

输出结果

第一行 四月是你的谎言
第二行 比宇宙更远的地方
第三行 不死者之王
第四行 关于我的女友是个一本正经的碧池这件事

接受到换行符 即跳过三个字符

    FileReader fr=new FileReader("d://a.txt");

    int i=0;
    while((i=fr.read())!=-1)
    {
        if((char)i=='\n')
        {
            fr.skip(3);
        }
        System.out.print((char)i);
    }
    fr.close();

输出结果

第一行 四月是你的谎言
 比宇宙更远的地方
 不死者之王
 关于我的女友是个一本正经的碧池这件事

FileReader类本身 并无此方法 它的读入 跳过 等方法 完全是继承自其父类的

FileWriter

概述

可以直接向文件中写入字符内容的输出流 继承了InputStreamWriter 是InputStreamWriter 的一个包装流 功能基本是基于InputStreamWriter 来实现

官方注释

/*
用于向写入文件字符内容的快捷类 该类假定默认的字符编码和字符缓冲大小都是合适的。
如果要自主设置指定这些设置的大小,请使用基于FileOutoutStream的适配器OutputStreamWriter

一个文件是否有效或者能否被创建取决于底层系统 尤其是一些底层系统,只允许一个文件在同一时间只能被一个FileWriter(或其他写入类)以写入方式打开
在一些情况下,当指定文件已经被打开后 再创建FileWriter对象时 该类中的构造函数会执行失败
FileWriter表示一个字符输出流
如需要原始字节输出流,请使用FileOutputStream
*/

源码分析

这里写图片描述

成员方法

和FileReader类似 此类的内容也比较简略 有三个类似的重载构造方法 入参分别是一个文件名 一个文件对象 一个文件描述符对象 其大部分应用方法也是使用继承自父类的方法
之外另增加了两个是否允许追加输入的构造方法 (这两个方法都是java8 加入的)
入参多了是否允许追加输入的boolean参数
可以看到所有方法都是封装的对应FileOutputStream方法

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}

boolean append参数 是否允许追加输入 如果为true 
则继续输入会追加到文件内容的尾部而不是从内容头部开始重写
public FileWriter(String fileName, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append));
}

public FileWriter(File file) throws IOException {
    super(new FileOutputStream(file));
}

boolean append参数 是否允许追加输入 如果为true 
则继续输入会追加到文件内容的尾部而不是从内容头部开始重写
public FileWriter(File file, boolean append) throws IOException {
    super(new FileOutputStream(file, append));
}

public FileWriter(FileDescriptor fd) {
    super(new FileOutputStream(fd));
}

代码示例

写入到文件中

   FileWriter fileWriter=new FileWriter("d:\\2017.txt");
   List<String> list= Arrays.asList("欢迎来到实力至上主义的教室","情色漫画老师","干物妹!小埋R","小林家的龙女仆");
    for (String s : list) {
        fileWriter.write(s+"\r\n");
    }
    fileWriter.flush();

注意 windows下写入 换行符为 ‘\r\n’
如果要程序能在不同操作系统运行,
可以写成

fileWriter.write(System.getProperty("line.separator"));

输出结果

欢迎来到实力至上主义的教室
情色漫画老师
干物妹!小埋R
小林家的龙女仆

猜你喜欢

转载自blog.csdn.net/u011863951/article/details/80004226
今日推荐