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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戎石锁 中级黑马   /  2012-8-21 17:33  /  1394 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戎石锁 于 2012-8-21 18:10 编辑
  1. import java.io.*;
  2. class FileReaderDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 FileReader fr = null;
  7.                 FileWriter fw = null;
  8.                 try
  9.                 {
  10.                         fw = new FileWriter("d:\\demo.txt");
  11.                         fw.write("adsgfadga");
  12.                         fr = new FileReader("d:\\demo.txt");
  13.                
  14.                         char[] ch = new char[1024];
  15.                         
  16.                         System.out.println(new String(ch));
  17.                
  18.                 }
  19.                
  20.                 catch (IOException e)
  21.                 {
  22.                         System.out.println(e.toString());        
  23.                 }
  24.                 finally
  25.                 {
  26.                         try
  27.                         {
  28.                                 if(fw!=null)
  29.                                 fw.close();
  30.                                 if(fr!=null)
  31.                                 fr.close();
  32.                         }
  33.                         catch (IOException e)
  34.                         {
  35.                                 System.out.println(e.toString());
  36.                         }
  37.                         

  38.                 }
  39.                
  40.         }

  41. }
复制代码
为什么我代码的运行结果会是这样的呢?

我的目的是:先写入“adsgfadga”字符串,然后再继续读取

未命名.jpg (9.13 KB, 下载次数: 9)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

8 个回复

正序浏览
明显没flush,还有最好处理close的try分开写。
回复 使用道具 举报
戎石锁 发表于 2012-8-21 17:38
我知道答案了, 没有接收; 但是 我加上 int num=fr.read(ch);
打印结果是-1,
为什么啊  ...

在读的时候如果你没有close或者flush,读取的文件根本就不存在,所以结果会是-1,所以实现你的目的,首先应该确保文件存在并且写入了数据
回复 使用道具 举报
唐杨 发表于 2012-8-21 18:04
在你读的时候,没有关闭流的话,是没有存进文件的,
那个fw写完之后,紧接着就开始读了.,
如果想最后一起关,.. ...

知道了 非常谢谢
回复 使用道具 举报
本帖最后由 唐杨 于 2012-8-21 18:09 编辑
戎石锁 发表于 2012-8-21 18:03
我在最后关闭不行吗?为什么啊

在你读的时候,没有关闭流的话,是没有存进文件的,
那个fw写完之后,紧接着就开始读了.,
如果想最后一起关,..在我刚刚写的那个红色关流fw.close();那里最好用fw.flush();  把内容刷进去.这样明白了么?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
唐杨 发表于 2012-8-21 17:59
try里边的代码这样写,你忘了关闭输入流,所以没有刷进去       
        try {
                        fw = new FileWriter("demo.txt");

我在最后关闭不行吗?为什么啊
回复 使用道具 举报
如果想用自定义缓冲区的话,要这样写  try
                try {
                        fw = new FileWriter("demo.txt");
                        fw.write("adsgfadga");
                        fw.close();
                        fr = new FileReader("demo.txt");
                       
                    char[] ch = new char[1024];
            int c;
            while ((c = fr.read()) != -1)
                    System.out.print((char)c);

      }
回复 使用道具 举报
try里边的代码这样写,你忘了关闭输入流,所以没有刷进去       
        try {
                        fw = new FileWriter("demo.txt");
                        fw.write("adsgfadga");
                        fw.close();
                        fr = new FileReader("demo.txt");
                        int b;
                        while ((b = fr.read()) != -1)
                                // 读取一个字节, 判断是否是文件末尾
                                System.out.print((char) b); // 将字节转为字符显示
                        fr.close();

                }
回复 使用道具 举报
我知道答案了, 没有接收; 但是 我加上 int num=fr.read(ch);
打印结果是-1,
为什么啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马