IO流之字符输出流【Writer】(四)

327 阅读4分钟

这是我参与更文挑战的第 12 天,活动详情查看: 更文挑战

日积月累,水滴石穿 😄

1、字符输出流【Writer】

java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字符输出流的基本公共方法。

  • void write(int c):写入单个字符。
  • void write(char[] cbuf): 写入字符数组。
  • 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.1、FileWriter【文件字符输出流】

java.io.FileWriter extends OutputStreamWriter

OutputStreamWriter extends Writer

OutputStreamWriter这个类之后再说。

FileWriter:把内存数据写入到文件中。

1.1.1、 构造方法

  • FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
  • FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。

当你创建一个流对象时,必须传入一个文件路径,类似于这种方式FileOutputStream

构造举例,代码如下:

public static void main(String[] args) throws IOException { 
        // 使用File对象创建流对象 
        File file = new File("a.txt"); 
        FileWriter fw = new FileWriter(file); 
        // 使用文件名称创建流对象 
        FileWriter fw2 = new FileWriter("b.txt"); 
}

构造方法的作用:

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

11.2、写出数据

  • 写单个字符write(int b) 方法,每次可以写出一个字符数据。

代码使用演示:

public static void main(String[] args) throws IOException { 

    // 使用文件名称创建流对象
    FileWriter fw = new FileWriter("IO流//d.txt");
    // 使用FileWriter中的方法write,把数据写入到内存缓冲区(字符转换为字节的过程)
    fw.write(98);
    fw.write('b');
    fw.write((30000));
    // 使用FileWriter中的方法flush,把内存缓冲区的数据,刷新到文件中
    // 使用flush方法后还可以使用 流
    fw.flush();
    // 释放资源(会先把内存缓冲区的数据,刷新到文件中)
    // 使用 close 方法后不能再次使用流
    fw.close();
}

结果:bb田

关闭和刷新

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

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

  • 写出字符数组write(char[] cbuf)write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream

代码使用演示:

public static void main(String[] args) throws IOException {

    FileWriter fr = new FileWriter("IO流//d.txt");
    // 字符串转换为字节数组
    char[] b = "你好棒棒哦".toCharArray();
    // 写出字符数组
    fr.write(b);  // 你好棒棒哦
    // 写出从索引2开始,2个字符。索引2是'棒',写两个字符,也就是'棒棒'
    fr.write(b,2,2);  //你好棒棒哦棒棒
    fr.close();
}
结果:你好棒棒哦棒棒
  • 写出字符串write(String str)write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便。

代码使用演示:

public static void main(String[] args) throws IOException {
    FileWriter fr = new FileWriter("IO流//d.txt");
    // 字符串
    String msg = "乘风破浪的姐姐";
    // 写出字符数组
    fr.write(msg); //乘风破浪的姐姐
    // 写出从索引2开始。索引2是'破',写两个字符,也就是'破浪'。
    fr.write(msg,2,2); // 乘风破浪的姐姐破浪
    fr.close();
}
结果:乘风破浪的姐姐破浪
  • 续写和换行:操作类似于FileOutputStream

    • FileWriter(String fileName, boolean append)
    • FileWriter(File file, boolean append) 参数:
  • fileName、file:写入数据的目的地

  • append:续写开关。true:创建对象不会覆盖源文件,继续在源文件的末尾追加写数据;false:创建新文件覆盖源文件

public static void main(String[] args) throws IOException {
    FileWriter fr = new FileWriter("IO流//d.txt",true);
    for (int i = 0; i < 4; i++) {
        fr.write("追加写");
        fr.write("\r\n");
    }
    fr.flush();
    fr.close();
}

输出结果:
你好棒棒哦棒棒乘风破浪的姐姐破浪追加写
追加写
追加写
追加写

换行符号:

  • window:\r\n

  • linux:\n

  • mac:\r

  • 如你对本文有疑问或本文有错误之处,欢迎评论留言指出。如觉得本文对你有所帮助,欢迎点赞和关注。