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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wahaha 中级黑马   /  2013-3-14 00:20  /  3019 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏添 于 2013-3-14 20:38 编辑

无意中写了个代码,运行怪异.下面代码的运行结果是E:\\info.txt里面的内容被清理干净了,变成空文档.

PS:info.txt 里面写的是键值对,就是properties 类型的文档.


public class TestDemo
{
        public static void main(String[] args) throws IOException
        {
                storeDemo();
        }
        public static void storeDemo() throws IOException
        {
                FileOutputStream fos = new FileOutputStream("E:\\info.txt");
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

10 个回复

正序浏览
夏添 发表于 2013-3-14 06:48
哥们,谢谢回复,共同进步!
这里的新建只是新建流对象,来与我指定的文档关联,这与文档覆盖没什么关系吧?我 ...

流对象肯定是建立了   文件是不是建立你可以试一下   把那个同名文件删了  看看是不是建立一个空白文件  IO这块是好麻烦 我也头大  东西太多  要多看几遍 进行总结才行
回复 使用道具 举报
谢洋 发表于 2013-3-14 10:09
public class TestDemo
{
        public static void main(String[] args) throws IOException, Interrup ...

:handshake
回复 使用道具 举报
夏添 发表于 2013-3-14 06:47
谢谢哥们的回复,在下还有疑惑.
FileOutputStream(String name,boolean append)构造函数的定义如下(API):
...

疑惑解答:
那假如你没有新建info.txt文档,你关联什么东西?Java他不知道要往哪里Writer啊!
所以不管你有还是没有info.txt文档,java他不知道就是没有,没有他就给你新建一个文档,
让你关联,要是你真的是确定有了这个info.txt文档,你就用这个FileOutputStream(String name,boolean append)
来告诉他后面的参数为true就可以了。这样解释明白了?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
谢洋 高级黑马 2013-3-14 10:09:55
8#

public class TestDemo
{
        public static void main(String[] args) throws IOException, InterruptedException
        {
                storeDemo();
        }
        public static void storeDemo() throws IOException, InterruptedException
        {       //当程执到这,就会产生一个新info.txt到硬盘上,这跟你写不写数据无关。
         //这个跟new File("xxx")有点区别,new File时,不会再硬盘上产生文件,但在内存中会有"xxx"信息,
         //只有  f.createNewFile(); f.mkdir() 时,才会在硬盘上产生效果,我想你要表达的是这个意思吧            
          FileOutputStream fos = new FileOutputStream("F:\\info.txt");
        }
   }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
wahaha 中级黑马 2013-3-14 06:49:07
7#
李阳 发表于 2013-3-14 00:33
FileOutputStream fos = new FileOutputStream("E:\\info.txt");
这句代码每次执行都会覆盖掉同名文件, ...

谢谢哥们的回复,在下还有疑惑.
FileOutputStream(String name,boolean append)构造函数的定义如下(API):
创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处.

疑惑就在这里:1.创建流,只是关联文档,我还没有往里面write内容,定义从头写或从末尾写,貌似没什么关系
回复 使用道具 举报
门文通 发表于 2013-3-14 05:23
新建了一个 同名文件  把原来的覆盖掉了

哥们,谢谢回复,共同进步!
这里的新建只是新建流对象,来与我指定的文档关联,这与文档覆盖没什么关系吧?我又不是新建文档.
回复 使用道具 举报
潘廖明 发表于 2013-3-14 01:32
FileOutputStream fos = new FileOutputStream("E:\\info.txt");
问题就出在这里了,每次重新运行程序都是 ...

谢谢哥们的回复,在下还有疑惑.
FileOutputStream(String name,boolean append)构造函数的定义如下(API):
创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处.

疑惑就在这里:1.创建流,只是关联文档,我还没有往里面write内容,定义从头写或从末尾写,貌似没什么关系


回复 使用道具 举报
新建了一个 同名文件  把原来的覆盖掉了   
回复 使用道具 举报
FileOutputStream fos = new FileOutputStream("E:\\info.txt");
问题就出在这里了,每次重新运行程序都是重新new一个文件输入流对象,不过这个是最基本的构造函数初始化的问题,还是得回去看API,马士兵老师
从第一天上课就一直强调!
回复 使用道具 举报
  FileOutputStream fos = new FileOutputStream("E:\\info.txt");
这句代码每次执行都会覆盖掉同名文件,所以你看到的info.txt是空白的。
  FileOutputStream fos = new FileOutputStream("E:\\info.txt",true);
这样写就不会覆盖同名文件,会在文件后面续写内容。建议多看看API文档。
我也看到IO,头都看大了。郁闷。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马