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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq563426478 中级黑马   /  2015-3-3 14:50  /  1022 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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     

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油~

查看全部评分

7 个回复

倒序浏览
System.out.print((char)fr.read());因为这句
回复 使用道具 举报
System.out.print((char)fr.read());因为这句 你改成System.out.print((char)ch); 就好了

评分

参与人数 1黑马币 +2 收起 理由
万合天宜 + 2 赞一个!

查看全部评分

回复 使用道具 举报
  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. }
复制代码

你跳过了很多字符

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
好的    受教了  谢谢   那里为什么不能用read呢 ???
回复 使用道具 举报
qq563426478 发表于 2015-3-3 15:08
好的    受教了  谢谢   那里为什么不能用read呢 ???

因为你如果再read一次,上一次read的字符还没被处理就被跳过去了,你得读一个处理一个(即打印一个)
回复 使用道具 举报
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一次 是不是就跳过了
回复 使用道具 举报
每执行一次read()方法,都会返回一个int类型并且指针会指向下一个int,你每次输出前还用read()进行了一次判断也就是说每次都让指针移动两次才输出一次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马