黑马程序员技术交流社区

标题: 一个关于文件写入的疑问 [打印本页]

作者: 韩伟    时间: 2012-8-1 14:23
标题: 一个关于文件写入的疑问
当我要写入文件到硬盘时可以这样做:
BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt"));
bf.write("abc");
bf.newLine();
bf.flush();

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

作者: 郑文博    时间: 2012-8-1 14:39
毕老师所说的“面盆原理”。每次都是new一个新的缓冲区是达到了清除的目的但是旧的就成为了垃圾,造成内存泄露。
如果想要单纯的清除操作,可以调用clear()方法。
如果本段代码存在for或者while循环中的话,可以把BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt"));提到循环外解决。
作者: 李东升    时间: 2012-8-1 14:57
把你的伪代码改了下,你运行一遍看看是不是在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类的方法。
作者: 韩伟    时间: 2012-8-1 19:50
上面两位大侠好像没明白我的意思,我是说如果在程序运行前a.txt文件已经存在且有数据,我再运行自己的程序往里面写数据,只要我程序里面有new FileWritrt("F:\\a.txt"),那么原来的a.txt文件就会被覆盖了,数据也没了。
我该怎么保证原来数据存在的情况下写入数据呢
作者: 朱烈葵    时间: 2012-8-1 20:42
BufferedWriter bf = new BufferedWriter(new FileWritrt("F:\\a.txt",true));  //FileWriter(String fileName, boolean append)
构造函数上面有把构造函数看下就会明白的
作者: 赵俊杰    时间: 2012-8-1 22:37
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();
        }

}

作者: 赵俊杰    时间: 2012-8-1 22:38
  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. }
复制代码

作者: hello world    时间: 2012-8-1 23:01
FileWriter
public FileWriter(String fileName, boolean append)
           throws IOException根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。这样就可以在文件末尾追加信息了。
作者: 韩伟    时间: 2012-8-2 08:24
原来如此,我竟然没有发现这一点儿,真是惭愧啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2