13Java语法回顾之filewriter&&filereader

本文详细介绍了Java中的IO流概念,包括字节流和字符流的基本使用方法。特别针对FileWriter和FileReader进行了深入探讨,包括如何创建对象、写入与读取数据、释放资源等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java语法回顾之FileWriter&&FileReader


读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。

FileWriter简介

/*
 * IO流:
 *      字节流
 *          字节输入流   读取数据    InputStream
 *          字节输出流   写入数据    OutputStream
 *      字符流
 *          字符输入流   读取数据    Reader
 *          字符输出流   写入数据    Writer
 * 
 * 需求:我要把一句话:"hello,io,我来了。祝你元旦快乐。"写入一个test.txt中。
 * 
 * 分析:
 *      A:由于我们是写数据,所以使用OutputStream或者Writer。
 *      B:由于我们要写入到一个文本文件中,所以最终选择了Writer。
 * 
 * 通过查看API,我们发现,Writer是一个抽象类。那么,怎么办呢?
 * 只能找子类使用。又由于我们是对文件操作,我们猜测了这个子类的名称是:FileWriter
 * 
 * 去看FileWriter的构造方法:
 *      A:FileWriter(File file) 
 *      B:FileWriter(String fileName)
 */

FileWriter代码测试

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        // 创建字符输出流对象
        /*
         * 创建字符输出流对象做了几件事情? A:调用系统功能创建了文件 B:创建字符输出流对象 C:把字符输出流对象指向创建的文件
         */
        FileWriter fw = new FileWriter("a.txt");

        // 调用写数据的功能
        fw.flush();
        // 释放资源
        fw.close();
        /*
         * 为什么要close()呢?
         * 1:让流对象变成垃圾。
         * 2:通知系统去释放和文件相关的资源。
         */
    }
}

FileWriter知识点

/*
 * 字符输出流操作步骤:
 * A:创建字符输出流对象
 * B:调用对象的写入数据方法,并刷新缓冲区
 * C:释放资源
 * 
 * 问题1:为什么FileWriter没有无参构造方法?
 *      因为写数据的时候,一定要明确写道哪里去。
 * 
 * 问题2:flush()和close()的区别?
 *      flush():只刷新缓冲区,流对象还可以继续使用。
 *      close():先刷新缓冲区,在关闭流对象。流对象不可以继续被使用。
 * 
 * 问题3:难道每次调用方法的时候,都需要刷新吗?或者说,不用刷,直接等到close()来解决,行不行?
 *      这两种方式都不可取。
 */

FileWriter知识点补充

/*
 * 1:写入数据的方式,有5种。
 *      write(int ch)
 *      write(char[] chs,int index,int len)
 *      write(char[] chs)
 *      write(String str,int index,int len)
 *      write(String str)
 * 
 * 3:数据没次都把以前的给覆盖了,如果我想追加写入,怎么办?
 *      构造的时候,用带两个参数的。
 *      public FileWriter(String fileName,boolean append)
 */

FileWriter知识点补充代码测试

public class FileWriterDemo3 {
    public static void main(String[] args) throws IOException {
        // 创建字符输出流对象
        FileWriter fw = new FileWriter("b.txt",true);

        // 追加数据
        fw.write("hello\r\n");
        fw.write("world\r\n");
        fw.write("java\r\n");
        fw.flush();

        // 释放资源
        fw.close();
    }
}

FileReader按字节读取字符

/*
 * 字符输入流读取数据步骤:
 * A:创建字符输入流对象
 * B:调用读取数据功能,并显示
 * C:释放资源
 * 
 * 一次读取一个字符。
 */

FileReader按字节读取字符代码测试

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        // 创建字符输入流对象
        FileReader fr = new FileReader("b.txt");
        //初始的len为0,就是没有读
        int len = 0;
        //如果len不等于-1,就一直读。
        while ((len = fr.read())!=-1) {
            System.out.print((char)len);
        }
        fr.close();
}

FileReader按字符数组读取字符

/*
 * 一次读取一个字符数组
 *      public int read(char[] cbuf)
 *      每次读取数据,把数据存储到字符数组中,返回值是实际读取长度。
 */

FileReader按字符数组读取字符代码测试

public class FileReaderDemo2 {
    public static void main(String[] args) throws IOException {
        // 创建字符输入流
        // FileReader fr = new FileReader("b.txt");
        FileReader fr = new FileReader("FileReaderDemo.java");

        // 读取数据
        // 如果实际读取长度是-1的情况,那么,说明已经读取到结尾了

        // 开发的写法
        // 数组的长度一般定义为1024的整数倍。

        char[] chs = new char[1024];
        int len = 0;
        while((len = fr.read(chs))!=-1){
            System.out.print(new String(chs,0,len));

        }

        // 释放资源
        fr.close();
    }
}

FileRead文件复制

/*
 * 需求:我要把项目路径下的FileReaderDemo.java复制到/Users/xwf/Downloads中
 * 
 * 数据源:
 *      读取数据:
 *      FileWriterDemo.java -- Reader -- FileReader
 * 
 * 目的地:
 *      写入数据:
 *      /Users/xwf/Downloads    -- Writer -- FileWriter
 */

FileRead文件复制代码测试

public class CopyFile {
    public static void main(String[] args) throws IOException {
        // 封装数据源
        FileReader fr = new FileReader("FileReaderDemo.java");
        // 封装目的地
        FileWriter fw = new FileWriter("//Users//xwf//Downloads//1.txt");

        // 读取数据
        char[] chs = new char[1024];
        int len = 0;
        while ((len = fr.read(chs))!=-1) {
            fw.write(chs,0,len);
        }
        // 释放资源
        fw.close();
        fr.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值