黑马程序员技术交流社区

标题: IO的读取输出错误 [打印本页]

作者: 胡遇潮    时间: 2011-12-13 20:16
标题: IO的读取输出错误
本帖最后由 胡遇潮 于 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);
}
输出也是错误的。
作者: 马伟奇    时间: 2011-12-13 20:59
  s=fr.read();这个错了,你上面是读,这里应该是写,应该改成writer
作者: 马伟奇    时间: 2011-12-13 21:02
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
                                }
                        }
                       
                }
        }
        }
}
作者: 唐秀启    时间: 2011-12-13 21:13
本帖最后由 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看明白了么
作者: 胡遇潮    时间: 2011-12-13 21:22
马伟奇 发表于 2011-12-13 20:59
s=fr.read();这个错了,你上面是读,这里应该是写,应该改成writer

fr.read() 每次读取一个字符 然后赋值给s 再输出看结果,没有存的操作,只是将s=fr.read()加上时输出结果错误
作者: 胡遇潮    时间: 2011-12-13 21:24
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
本帖最后由 吴上储 于 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. 输出也是错误的
复制代码

作者: 唐秀启    时间: 2011-12-13 21:42
去我板凳那楼看 我现在去修改  给你说明为什么 会不一样
作者: 李振元    时间: 2011-12-13 22:15
请楼主记住一点,这道题就OK!那就是:
只要调用fr.read(),就会读取一个字符,所以不要调用两次fr.read()
而你的两种错误都调用了两次fr.read(),所以不正确。

作者: 马伟奇    时间: 2011-12-14 09:16
不好意思,昨天理解错误了,是这样的,你的代码这里读了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);
                        }
作者: 李建锋    时间: 2011-12-14 10:27
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) {}
                }
        }
}
这样才可以,上面读取了,下面就不要读取了!




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