黑马程序员技术交流社区

标题: 在IO中的问题 [打印本页]

作者: qq563426478    时间: 2015-3-3 14:50
标题: 在IO中的问题
package com.houde;


import java.io.*;
public class DemoIO01 {

    public static void main(String[] args) {
        FileWriter fw=null;
        FileReader fr=null;
        // TODO Auto-generated method stub
        try {
             fw=new FileWriter("c://a.txt");
            fw.write("abcedfghijklmnopqrstuvwxyz");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(fw!=null)
                try {
                        fw.close();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                };
            }
        try {
            fr=new FileReader("c:\\a.txt");
            //fr.read();
            int ch=0;
            while((ch=fr.read())!=-1){
                System.out.print((char)fr.read());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(fw!=null)
                    fw.close();
                if(fr!=null)
                    fr.close();
            } catch (IOException e2) {
                // TODO: handle exception
                System.out.println(e2.toString());
            }
            
        }
        }
    }
输出的是:befhjlnprtvxz
为什么输出的不是:abcedfghijklmnopqrstuvwxyz     


作者: 菜鸟一号    时间: 2015-3-3 14:59
System.out.print((char)fr.read());因为这句
作者: 菜鸟一号    时间: 2015-3-3 15:00
System.out.print((char)fr.read());因为这句 你改成System.out.print((char)ch); 就好了
作者: alvis2015    时间: 2015-3-3 15:03
  1. import java.io.*;

  2. public class TestIO {

  3.         public static void main(String[] args) {
  4.                 FileWriter fw = null;
  5.                 FileReader fr = null;
  6.                 // TODO Auto-generated method stub
  7.                 try {
  8.                         fw = new FileWriter("c://a.txt");
  9.                         fw.write("adfagagaggadgadag");
  10.                         fw.flush();
  11.                 } catch (IOException e) {
  12.                         // TODO Auto-generated catch block
  13.                         e.printStackTrace();
  14.                 } finally {
  15.                         if (fw != null)
  16.                                 try {
  17.                                         fw.close();
  18.                                 } catch (Exception e) {
  19.                                         // TODO Auto-generated catch block
  20.                                         e.printStackTrace();
  21.                                 }
  22.                         ;
  23.                 }
  24.                 try {
  25.                         fr = new FileReader("c:\\a.txt");
  26.                         // fr.read();
  27.                         int ch = 0;

  28.                         while ((ch = fr.read()) != -1) {
  29.                                 //System.out.println((char)fr.read());//你跳过了很多字符,这里不能再read了
  30.                                 System.out.print((char) ch);
  31.                         }
  32.                 } catch (IOException e) {
  33.                         // TODO Auto-generated catch block
  34.                         e.printStackTrace();
  35.                 } finally {
  36.                         try {
  37.                                 if (fw != null)
  38.                                         fw.close();
  39.                                 if (fr != null)
  40.                                         fr.close();
  41.                         } catch (IOException e2) {
  42.                                 // TODO: handle exception
  43.                                 System.out.println(e2.toString());
  44.                         }

  45.                 }
  46.         }
  47. }
复制代码

你跳过了很多字符
作者: qq563426478    时间: 2015-3-3 15:08
好的    受教了  谢谢   那里为什么不能用read呢 ???
作者: alvis2015    时间: 2015-3-3 15:17
qq563426478 发表于 2015-3-3 15:08
好的    受教了  谢谢   那里为什么不能用read呢 ???

因为你如果再read一次,上一次read的字符还没被处理就被跳过去了,你得读一个处理一个(即打印一个)
作者: 文浩    时间: 2015-3-4 15:31
qq563426478 发表于 2015-3-3 15:08
好的    受教了  谢谢   那里为什么不能用read呢 ???

while ((ch = fr.read()) != -1) {
                                //System.out.println((char)fr.read());//你跳过了很多字符,这里不能再read了
                                System.out.print((char) ch);

你while里面寄已经用read方法读了一个字符,后面还read一次 是不是就跳过了
作者: ko889910    时间: 2015-3-4 21:09
每执行一次read()方法,都会返回一个int类型并且指针会指向下一个int,你每次输出前还用read()进行了一次判断也就是说每次都让指针移动两次才输出一次




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