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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄杨 中级黑马   /  2013-1-30 02:56  /  1687 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-30 11:32 编辑

public static void main(String[] args) throws IOException {
                // 创建引用
                FileReader fr=null;

                try {
                        //初始化流对象
                        fr=new FileReader("buf.txt");
                        //读数据
                        int num1=fr.read();
                        char str1=(char) num1;
                        int num2=fr.read();
                        char str2=(char) num2;
                        int num3=fr.read();
                        char str3=(char) num3;
                        //打印
                        System.out.println(str1+str2+str3);
                        
                } catch (Exception e) {
                        // TODO: handle exception
                        System.out.println(e.toString());
                }finally{
                        try {
                                //关闭流
                                if(fr!=null)
                                fr.close();
                        } catch (Exception e2) {
                                // TODO: handle exception
                                System.out.println(e2.toString());
                        }
                        
                }


记事本里面的数据是haha,但是打印出来的是305,找了好久没找出问题,求教!

点评

请申请改下名字,否则发帖是不给分的。  发表于 2013-1-30 11:29

评分

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

查看全部评分

4 个回复

倒序浏览
本帖最后由 黑马张英涛 于 2013-1-30 09:55 编辑

System.out.println(str1+str2+str3);
问题出在这句代码上。
字符之间没有 “+” 操作符,所以jvm会将char提升为int后再运算,
所以这里实际是3个字符的asc码在相加,最后打印的是3个char的
asc码的和。
你可以用Character.toString(str1)方法把他们都变成字符串再相加就得出正确结果了。
回复 使用道具 举报
你的目的是在控制台输出文本框里前3的字符,也可以创建一个输出流来完成。
  1. import java.io.*;
  2. class Test{
  3.         public static void main(String[] args) throws IOException {
  4.                 // 创建引用
  5.                 FileReader fr=null;
  6.                                 OutputStreamWriter opsw = null;

  7.                 try {
  8.                         //初始化流对象
  9.                         opsw = new OutputStreamWriter(System.out);
  10.                                                 fr=new FileReader("buf.txt");
  11.                         //读数据
  12.                         int num1=fr.read();
  13.                         opsw.write(num1);
  14.                                                 char str1=(char) num1;
  15.                         
  16.                                                 int num2=fr.read();
  17.                         opsw.write(num2);
  18.                                                 char str2=(char) num2;
  19.                         
  20.                                                 int num3=fr.read();
  21.                         opsw.write(num3);
  22.                                                 char str3=(char) num3;
  23.                         //打印
  24.                         //System.out.println(str1+str2+str3);
  25.                                                 System.out.println(Character.toString(str1) +Character.toString(str2) +Character.toString(str3) );
  26.                         
  27.                 } catch (Exception e) {
  28.                         // TODO: handle exception
  29.                         System.out.println(e.toString());
  30.                 }finally{
  31.                         try {
  32.                                 opsw.close();
  33.                                                                 //关闭流
  34.                                 if(fr!=null)
  35.                                 fr.close();
  36.                         } catch (Exception e2) {
  37.                                 // TODO: handle exception
  38.                                 System.out.println(e2.toString());
  39.                         }
  40.                         
  41.                 }
  42.                 }
  43. }
复制代码
这样也能达到目的。
回复 使用道具 举报
System.out.println(str1+str2+str3);
你的这句话出错了,所以被当做int来运算了,
你把这句话改一下,就行
System.out.println(str1+""+str2+""+str3);
回复 使用道具 举报
    你这部分:/*                //读数据
                int num1=fr.read();
                        char str1=(char) num1;
                        int num2=fr.read();
                        char str2=(char) num2;
                        int num3=fr.read();
                        char str3=(char) num3;
                  */
不是在读数据!
你看看jdk的帮助文档,FileReader类中的read()方法返回的是:是否达流的末尾(-1表示读取结束),如果你真想第一个字符字符的读取的话可以这样改:
        char str  
            while(fr.read(str)!=-1) System.out.print(str);
                     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马