黑马程序员技术交流社区

标题: 文件重写会写掉原来的文件吗? [打印本页]

作者: 偏執旳、靑春    时间: 2013-3-1 10:55
标题: 文件重写会写掉原来的文件吗?
class FileWriteDemo
{
FileWrite fw=new Filewrite("123.txt",false);//false说明覆盖
fw.write("dfsdf");
fw.close();

}

假说我原来文件里面有一篇很长的文章,现在只重写dfsdf五个字符进去
那么我的这个文章是只有这个五个字符呢?还是五个字符只覆盖了前面一小段位置

作者: 刘圣繁    时间: 2013-3-1 11:10
FileWriter
看看API文档啊
public FileWriter(String fileName,
                  boolean append)
           throws IOException根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

参数:
fileName - 一个字符串,表示与系统有关的文件名。
append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
很显然 果果为false   会从文件开始处开始写  当然是你写多少就会覆盖多少   “五个字符只覆盖了前面一小段位置”
实现证明正确

作者: Benwolf0818    时间: 2013-3-1 11:11
覆盖原来的文件,只有5个字符
作者: 吴硕    时间: 2013-3-1 11:30
本帖最后由 吴硕 于 2013-3-1 11:32 编辑

如下执行后,123.txt中已经没有内容了
  1. class FileWriterTest
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 FileWriter fw = new FileWriter("123.txt", false);
  6.                 fw.flush();
  7.                 fw.close();
  8.         }
  9. }
复制代码
说明FileWrite fw=new Filewrite("123.txt",false);已经把文件的内容清空了
其实fw.write("dfsdf");的write方法默认就应该是在文件末尾续写,如下代码可以看出
  1. class FileWriterTest
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 FileWriter fw = new FileWriter("123.txt", false);
  6.                 fw.write("asdff");
  7.                 fw.write("xxxx");
  8.                 fw.flush();
  9.                 fw.close();
  10.         }
  11. }
复制代码

作者: 侯丛政    时间: 2013-3-1 12:01
首先,  你的FileWriter写成了FileWrite.
对于, public FileWriter(File file, boolean append),  
boolean append = true时,  如果已有file  则在此文件的末尾添加数据
boolean append = false时,  如果已有file  则会重新创建一个file并覆盖之前的.
                                          如果没有file  那就自己创建一个并写入数据
public class FileWriterDemo {
        public static void main(String[] args) throws IOException {
                FileWriter fw = new FileWriter("d:\\test.txt", false);
                fw.write("Jay");
                fw.close;
        }
}
所以向上面这样写代码是会覆盖里面所有内容的

作者: 顾传文    时间: 2013-3-1 13:09
FileWrite fw=new Filewrite("123.txt",false);//false说明是覆盖。
那么覆盖的原理是什么?
首先,这句先将123.txt这个文件删除,让后再重新创建123.txt文件。
不管你原来的文件里面有多少数据,都被删除了,而且Java中删除的文件不走回收站,重新创建的123.txt这个文件的数据是空的。
补充一点:RandAccessFile类创建文件时,假如文件存在时,是不会覆盖原来的文件的。
作者: 贾振凯    时间: 2013-3-1 14:06
刘圣繁 发表于 2013-3-1 11:10
FileWriter
看看API文档啊
public FileWriter(String fileName,

呃。。。。。。。。我实验的是全部覆盖:
public class SubClass extends FatherClass {
        public static void main(String[] args) throws IOException {
                FileWriter fw = new FileWriter("jzk.txt");
                fw.write("你好,我叫贾振凯!");
                fw.close();
               
                FileWriter fw2 = new FileWriter("jzk.txt",true);
                fw2.write("真的吗?");
                fw2.close();
        }
}求教你怎么试验的?




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