美文网首页
IO流之文件字符输出流【FileWriter】

IO流之文件字符输出流【FileWriter】

作者: 程序员小杰 | 来源:发表于2020-08-22 16:20 被阅读0次

    上一篇:IO流之文件字符输入流【FileReader】https://www.jianshu.com/p/d35a45e96eef

    一、字符输出流【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() 关闭此流,但要先刷新它

    二、FileWriter【文件字符输出流】

    java.io.FileWriter extends OutputStreamWriter extends Writer
    FileWriter:把内存数据写入到文件中。

    2.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对象指向创建好的文件

    三、写出数据

    写出字符: 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,把内存缓冲区的数据,刷新到文件中
            fw.flush();
            //释放资源(会先把内存缓冲区的数据,刷新到文件中)
            fw.close();
        }
    
    结果:bb田
    
    关闭和刷新

    因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据 的。如果我们既想写出数据,又想继续使用流,就需要 flush 方法了。

    • 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
    下一篇:IO流之缓冲流 https://www.jianshu.com/p/f80daa6fe45f

    相关文章

      网友评论

          本文标题:IO流之文件字符输出流【FileWriter】

          本文链接:https://www.haomeiwen.com/subject/jzosjktx.html