BufferedWtiter指向的文件会被清空

        结论是:字符输出流和字节输出流在创建时,其指向的文件会被清空.

        今天做作业遇到一个问题,其实逻辑很简单:就是从文件names.txt中读取员工的姓名,然后放入List集合中,再使用随机数获得一个索引,此索引指向的人就是中奖者,不过有一个要求,就是被抽中的人不能再参与之后的抽奖,然后要将除去抽中的人之后的名单再次写入到names.txt文件中.

        一开始自然就是写BufferedWriter和BufferedRead了,为了偷懒使用try-with-resources来编写代码,如下:

try(BufferedReader bf = new BufferedReader(new FileReader("names.txt"));
    BufferedWriter bw = new BufferedWriter(new FileWriter("names.txt"))){

然后完成后续的代码,但是我发现一运行就会报错 :

报错的代码为下图中第23行出:

Random的nextInt()方法的参数不能为0,我感到很奇怪,然后做了一些代码的测试,在while循环中加了一条打印语句,发现while循环根本没有运行,names.txt中的内容也都被清除了.但是我这个时候还没有意识到是因为BufferedWriter的原因.

然后我选择最好的解决办法,打开搜索引擎进行搜索, 

我点击了第一条,里边给出的结论是:

我当然按照这样的操作,进行了更改,程序也能够正常的运行了,不过我本着好奇的新然后对代码进行了测试,发现并非如同他所说那样,完全可以将close语句放到finally语句块中进行,读和写二者并不冲突.最后通过debug发现只要创建了输出流对象且指向了一个文件,在执行这行代码之后,指向的文件就会被清空.

希望这个简单的小文章,能够给和我同样搜索到这个问题的同学朋友提供一点点帮助,感谢观看.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值