结论是:字符输出流和字节输出流在创建时,其指向的文件会被清空.
今天做作业遇到一个问题,其实逻辑很简单:就是从文件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发现只要创建了输出流对象且指向了一个文件,在执行这行代码之后,指向的文件就会被清空.
希望这个简单的小文章,能够给和我同样搜索到这个问题的同学朋友提供一点点帮助,感谢观看.