java bufferedReader 读出来为什么都是空的?

查看:209
本文介绍了java bufferedReader 读出来为什么都是空的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

帮朋友提问:

        File file1 = new File("D:\\a.txt");
        File file2 = new File("D:\\a.txt");
        FileWriter fileWriter2 = new FileWriter(file2);
        FileReader fileReader = new FileReader(file1);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        BufferedWriter bufferedWriter2 = new BufferedWriter(fileWriter2);
        String length = null;
            
        while((length=bufferedReader.readLine())!=null) {
            System.out.println(length);
            
            bufferedWriter2.write(length);
        }
        fileReader.close();
        bufferedWriter2.close();

这段代码为什么读到的length都是null?
我个人觉得是因为file1和file2同时打开a.txt,会出现读写冲突,导致都出来的都是null,不知大家怎么看?

解决方案

Java IO是基于字节流来操作的,当然字符流在底层也是通过字节流来完成的,其中有一个隐含的指针来表示当前读取或者写入的位置。

@iMouseWu 是对的,因为 FileOutputStream 对象被创建时会执行一个 nativeopen() 操作,如果没有指定 append 属性为 true,则指针会移动到文件开始的位置,相当于清空了文件操作。

当然题主使用的 FileWiter 也是通过 FileOutputStream 来实现的。

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

另外需要读写同时操作文件,建议采用 RandomAccessFile

这篇关于java bufferedReader 读出来为什么都是空的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆