A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adamjy 中级黑马   /  2014-4-5 15:30  /  1452 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:\\practice\\a.txt"));

为什么这句话执行完之后,直接将a.txt文档里面的东西置为空了????

6 个回复

倒序浏览
IO流操作文件,如果文件存在,则覆盖原文件,就相当于把原来的文件删了,在建一个新的文件,和这个文件同名。如果不存在这个文件,就直接建立这个文件。楼主如果想在文件后面添加内容可以在构造函数中加一个Boolean值,ture。如:new FileOutputStream("d:\\practice\\a.txt",ture);
回复 使用道具 举报
public FileOutputStream(File file,
                        boolean append)
                 throws FileNotFoundException

参数:
file - 为了进行写入而打开的文件。
append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处

很显然,LZ用的
public FileOutputStream(File file)
                 throws FileNotFoundException
这种方法文本是被覆盖掉了。如果不想覆盖想追加可以用前面那个将append参数设置为true

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
OutputStreamWriter是转换流,它是字符通向字节的桥梁,参数必须是一个字节输出流
当定义OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:\\practice\\a.txt"));时
传入一个文件输出流
new FileOutputStream("d:\\practice\\a.txt")是指创建一个输出流向字符串表示的文件中写入数据,如果文件已经存在,则覆盖该文件,如果想添加数据,
new FileOutputStream("d:\\practice\\a.txt",true);
回复 使用道具 举报
因为这个大类是字符流转字节流的,它是由缓冲区的,在没有关闭此流时 ,数据还存储在缓冲去里。
回复 使用道具 举报
本帖最后由 Peach2014 于 2014-4-6 20:12 编辑

实际上当执行完“new FileOutputStream("d:\\practice\\a.txt")”这一句话后,a.txt中的文档就已经被刷新成空的。这句话可以理解为,在“d:\practice\”目录下创建一个a.txt文件,如果之前有就直接覆盖之前的。
FileOutputStream(File file)
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append)
          创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

如果你不想覆盖之前的内容,而只是想添加内容,那就需要调用下面的这个构造函数!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主应该是没弄明白FileOutStream,建议楼主看一下JDK 中有关FileOutStream方法的,这个方法有很多重载的方法,你如果是想要在这个a.txt上追加东西可以使用public FileOutputStream(String name,  boolean append)   ;           创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。详见如下网址:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/io/FileOutputStream.html#FileOutputStream(java.io.File)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马