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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡遇潮 黑马帝   /  2011-12-13 20:16  /  2591 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡遇潮 于 2011-12-14 11:12 编辑

import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo {

        public static void main(String[] args)
        {
                FileReader fr=null;
                try {
                         fr= new FileReader("c:\\test.txt");
                         int s=0;
                        while((s=fr.read())!=-1)
                        {
                                s=fr.read();
                                System.out.println("ch=" + (char)s);
                        }
                } catch (IOException e) {}
                finally
                {
                        try {
                                fr.close();
                        } catch (IOException e) {}
                }
        }
}
s=fr.read();如果去掉正确,加上不对。


while((fr.read())!=-1)
{
    s=fr.read();
    System.out.println("ch=" + (char)s);
}
输出也是错误的。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

10 个回复

倒序浏览
  s=fr.read();这个错了,你上面是读,这里应该是写,应该改成writer
回复 使用道具 举报
public class FileCopyDemo2 {
       public static void main(String[] args) {
           FileReader fr = null;
           FileWriter fw = null;
           BufferedReader br = null;
           BufferedWriter bw = null;
          
           try {
                fr = new FileReader("E:\\Workspaces\\FileWriterDemo3.java");
                fw = new FileWriter("d:\\FileWriterDemo3.txt");
                br = new BufferedReader(fr);
                bw = new BufferedWriter(fw);
                String line = null;
                while((line = br.readLine())!=null){
                        bw.write(line);
                        bw.newLine();
                        bw.flush();
                }
        } catch (Exception e) {
                // TODO: handle exception
        }finally{
                if(bw!=null){
                        try {
                                bw.close();       
                        } catch (Exception e2) {
                                // TODO: handle exception
                        }
                        if(fw!=null){
                                try {
                                        fw.close();
                                } catch (Exception e2) {
                                        // TODO: handle exception
                                }
                        }
                       
                }
        }
        }
}
回复 使用道具 举报
本帖最后由 benbenqi 于 2011-12-13 21:47 编辑
  1. import java.io.*;
  2. public class FileReaderDemo
  3. {
  4.         public static void main(String[] args)
  5.     {
  6.                 FileReader fr=null;
  7.         try {
  8.                                 fr= new FileReader("c:\\demo.txt");
  9.                 int s=0;
  10.                  while((s=fr.read())!=-1)
  11.                                 {
  12.                                         s=fr.read();上面已经有了s=fr.read()你已经读了一遍,你没有输出,又继续读了一遍                                        System.out.println("ch=" + (char)s);
  13.                                 }

  14.               }
  15.                 catch (IOException e) {}
  16.         finally
  17.         {
  18.              try {
  19.                                         fr.close();
  20.                   }
  21.                          catch (IOException e)
  22.                                  {}
  23.          }
  24.     }
  25. }
复制代码
while((s=fr.read())!=-1)
{
//s=fr.read();上面已经有了s=fr.read()你已经读了一遍,你没有输出,又继续读了一遍
System.out.println("ch=" + (char)s);
}

k看明白了么

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
马伟奇 发表于 2011-12-13 20:59
s=fr.read();这个错了,你上面是读,这里应该是写,应该改成writer

fr.read() 每次读取一个字符 然后赋值给s 再输出看结果,没有存的操作,只是将s=fr.read()加上时输出结果错误
回复 使用道具 举报
benbenqi 发表于 2011-12-13 21:13
Exception in thread "main" java.lang.NullPointerEx
ception at FileReaderDemo.main(FileReaderDemo.jav ...

随便建立一个,里面有几个字符(adfalfka)就行,就是输出结果有错误
回复 使用道具 举报
吴上储 黑马帝 2011-12-13 21:30:20
7#
本帖最后由 吴上储 于 2011-12-13 21:35 编辑

  1. import java.io.FileReader;
  2. import java.io.IOException;

  3. public class FileReaderDemo {

  4.         public static void main(String[] args)
  5.         {
  6.                 FileReader fr=null;
  7.                 try {
  8.                          fr= new FileReader("c:\\test.txt");//例如:你test里面内容是 itheima
  9.                     int s=0;
  10.                         while((s=fr.read())!=-1)//s=fr.read()  这里读取一次 相当于 s=i
  11.                         {
  12.                                 s=fr.read();//这里又读取一次 这时fr.read()=t 再把t赋值给s 就是s=t
  13.                                 System.out.println("ch=" + (char)s);//输出t
  14.                         }
  15. //循环结束 输出的是 tem?
  16.                 } catch (IOException e) {
  17.                            e.printStackTrace();//这样就不会会空指针异常了
  18.                         }
  19.                 finally
  20.                 {
  21.                         try {
  22.                                 fr.close();
  23.                         } catch (IOException e) {
  24.                                 e.printStackTrace();//这样就不会会空指针异常了

  25.                            }
  26.                 }
  27.         }
  28. }
  29. s=fr.read();如果去掉正确,加上不对。


  30. while((fr.read())!=-1) //这里也一样 都被覆盖了一次
  31. {
  32.     s=fr.read();
  33.     System.out.println("ch=" + (char)s);
  34. }
  35. 输出也是错误的
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
唐秀启 黑马帝 2011-12-13 21:42:51
8#
去我板凳那楼看 我现在去修改  给你说明为什么 会不一样

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李振元 黑马帝 2011-12-13 22:15:17
9#
请楼主记住一点,这道题就OK!那就是:
只要调用fr.read(),就会读取一个字符,所以不要调用两次fr.read()
而你的两种错误都调用了两次fr.read(),所以不正确。
回复 使用道具 举报
马伟奇 黑马帝 2011-12-14 09:16:11
10#
不好意思,昨天理解错误了,是这样的,你的代码这里读了2次  
FileReader fr=null;
                try {
                         fr= new FileReader("c:\\test.txt");
                         int s=0;
                        while((s=fr.read())!=-1)//做循环的时候已经读了
                        {
                                s=fr.read();//这里重复了,又读了一次,所以这行代码是多余的,去掉就好了
                                System.out.println("ch=" + (char)s);
                        }

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李建锋 黑马帝 2011-12-14 10:27:51
11#
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo {

       public static void main(String[] args)
        {
                FileReader fr=null;
                try {
                         fr= new FileReader("c:\\test.txt");
                         int s=0;
                        while((s=fr.read())!=-1)
                        {
//                                s=fr.read();
                                System.out.println("ch=" + (char)s);
                        }
                } catch (IOException e) {}
                finally
                {
                        try {
                                fr.close();
                        } catch (IOException e) {}
                }
        }
}
这样才可以,上面读取了,下面就不要读取了!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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