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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩伟 中级黑马   /  2012-8-1 14:23  /  2054 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当我要写入文件到硬盘时可以这样做:
BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt"));
bf.write("abc");
bf.newLine();
bf.flush();

可是这样的话每次close之后再写入就会创建一个新的文件,而原来的文件将全部丢失。
但是我希望能在原来的文件下追加内容怎么操作呢。我发现除了RandomAccessFile类中标记为'r'的可以不删除文件对文件进行访问外就不知道其他的了。
有没有一个方法想C里面那样open文件,如果存在就打开,不存在就创建?

8 个回复

倒序浏览
毕老师所说的“面盆原理”。每次都是new一个新的缓冲区是达到了清除的目的但是旧的就成为了垃圾,造成内存泄露。
如果想要单纯的清除操作,可以调用clear()方法。
如果本段代码存在for或者while循环中的话,可以把BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt"));提到循环外解决。
回复 使用道具 举报
把你的伪代码改了下,你运行一遍看看是不是在a.txt文件中写入了abcabc。
  1. public static void main(String[] args) {
  2.                 BufferedWriter bf;
  3.                 try {
  4.                         bf = new BufferedWriter(new FileWriter("a.txt"));
  5.                         bf.write("abc");
  6.                         bf.write("abc");
  7.                         bf.newLine();
  8.                         bf.flush();
  9.                 } catch (IOException e) {
  10.                         e.printStackTrace();
  11.                 }
  12.                

  13.         }
复制代码
你所说的文件存在则打开,不存在就创建,这个好像要用到File类的方法。
回复 使用道具 举报
上面两位大侠好像没明白我的意思,我是说如果在程序运行前a.txt文件已经存在且有数据,我再运行自己的程序往里面写数据,只要我程序里面有new FileWritrt("F:\\a.txt"),那么原来的a.txt文件就会被覆盖了,数据也没了。
我该怎么保证原来数据存在的情况下写入数据呢
回复 使用道具 举报
BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt",true));  //FileWriter(String fileName, boolean append)
构造函数上面有把构造函数看下就会明白的
回复 使用道具 举报
import java.io.*;
public class test {
        public static void main(String[] args) throws IOException
        {
         //重点在new FileWriter中的boolean参数,为false时本次写入将覆盖文件中原来的内容,为true时在则原来的基础上追加新的内容
     BufferedWriter br=new BufferedWriter(new FileWriter("c:/a.txt",false));   
     br.append("*");
     br.close();
        }

}
回复 使用道具 举报
  1. import java.io.*;
  2. public class test {
  3.         public static void main(String[] args) throws IOException
  4.         {
  5.          //重点在new FileWriter中的boolean参数,为false时为覆盖文件中原来的内容,为true时在原来的基础上追加新的内容
  6.      BufferedWriter br=new BufferedWriter(new FileWriter("c:/a.txt",false));   
  7.      br.append("*");
  8.      br.close();
  9.         }

  10. }
复制代码
回复 使用道具 举报
FileWriter
public FileWriter(String fileName, boolean append)
           throws IOException根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。这样就可以在文件末尾追加信息了。
回复 使用道具 举报
原来如此,我竟然没有发现这一点儿,真是惭愧啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马