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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-4-2 20:28  /  1131 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. class  Demo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileReader fr = new FileReader("ZhuanHuan.java");
  7.                 LineNumberReader lin = new LineNumberReader(fr);
  8.                 while(true)
  9.                 {
  10.                         int s = lin.read();
  11.                         if(s==-1)
  12.                                 break;
  13.                         else
  14.                                 System.out.print(lin.getLineNumber()+";;"+(char)s);//为什么这里做了强制转换了还是数字的啊
  15.                
  16.                 }
  17.                 lin.close();
  18.         }
  19. }
复制代码

5 个回复

倒序浏览
当然是数字,比如数字1, 你对他进行强制转换(char)1,结果还是1啊,只不过之前的1是int类型,后面的1是字符型
回复 使用道具 举报
本帖最后由 宋超2356 于 2014-4-2 20:57 编辑

首先输出结果不是数字,而是数字(行号)和文件字符的交叉体如HelloWord输出是...

0;;p0;;u0;;b0;;l0;;i0;;c0;; 0;;c0;;l0;;a0;;s0;;s0;; 0;;H0;;e0;;l0;;l0;;o0;;w0;;o0;;r0;;l0;;d0;;{1;;
1;; 1;;p1;;u1;;b1;;l1;;i1;;c1;; 1;;s1;;t1;;a1;;t1;;i1;;c1;; 1;;v1;;o1;;i1;;d1;; 1;;m1;;a1;;i1;;n1;;(1;;S1;;t1;;r1;;i1;;n1;;g1;;[1;;]1;; 1;;a1;;r1;;g1;;s1;;)1;;{2;;
3;;
3;; 3;; 3;; 3;; 3;;S3;;y3;;s3;;t3;;e3;;m3;;.3;;o3;;u3;;t3;;.3;;p3;;r3;;i3;;n3;;t3;;l3;;n3;;(3;;"3;;H3;;e3;;l3;;l3;;o3;;w3;;o3;;r3;;l3;;d3;;!3;;"3;;)3;;;3;; 4;;
5;;
5;;}6;;
6;;}

改成这样应该是需要的那个意思
  1. import java.io.*;
  2. class  Test
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileReader fr = new FileReader("d:/java/Helloworld.java");
  7.                 LineNumberReader lin = new LineNumberReader(fr);
  8.                 String s = null ;
  9.                while((s = lin.readLine()) != null) {
  10.                         System.out.println(lin.getLineNumber()+s);
  11.                 }
  12.                
  13.                 lin.close();
  14.         }
  15. }
复制代码
回复 使用道具 举报
你仔细瞧瞧!int型的s其实已经被转换成char类型了,只是中间多打印了很多的行号和";;",将这些符号都给拆开来了。如下面代码
  1. class  Demo
  2. {
  3.         public static void main(String[] args) throws IOException
  4.         {
  5.                 FileReader fr = new FileReader("d:Demo.java");
  6.                 LineNumberReader lin = new LineNumberReader(fr);
  7.                 while(true)
  8.                 {
  9.                                 int s = lin.read();
  10.                         if(s==-1)
  11.                                 break;
  12.                         else //把下行中lin.getLineNumber()+";;"+去掉,就没问题了.(char)s应经把int型s已经转换过来了,只是你没打印一个字符就会打印一下当前行号,那么没两个字符中间就多了行号+";;",你仔细瞧瞧!            
  13.                                 System.out.print(lin.getLineNumber()+";;"+(char)s);//为什么这里做了强制转换了还是数字的啊
  14.                
  15.                 }
  16.                 lin.close();
  17.         }
  18. }
  19. //建议要打印行号还是用readLine()方法好。
  20. /*class Demo{
  21.         public static void main(String[] args){
  22.         FileReader fr = new FileReader("ZhuanHuan.java");
  23.             LineNumberReader lnr = new LineNumberReader(fr);
  24.             String line = null;
  25.             while((line=lnr.readLine())!=null){                 
  26.                     System.out.println(lnr.getLineNumber()+"---"+line);
  27.             }
  28.             lnr.close();
  29.         }
  30. }*/
复制代码

评分

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

查看全部评分

回复 使用道具 举报
import java.io.*;
class  Demo
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr = new FileReader("ZhuanHuan.java");
                LineNumberReader lin = new LineNumberReader(fr);
                while(true)//错误的while循环
                {
                        int s = lin.read();
                        if(s==-1)
                                break;
                        else
                                System.out.print(lin.getLineNumber()+";;"+(char)s);//为什么这里做了强制转换了还是数字的啊
                                                               
                }
                lin.close();
        }
}
哥们,我不知道你怎么计算出的结果!
这是我编译出的结果
E:\java>java Demo
Exception in thread "main" java.io.FileNotFoundException: ZhuanHuan.java (系统找
不到指定的文件。)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at java.io.FileReader.<init>(FileReader.java:41)
        at Demo.main(Demo.java:6)

你这代码本身就是错误的
while(true)这个是无限循环
你重新写一下代码。应该能转换的成的。
String类也是字符串,不可能通过不了

评分

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

查看全部评分

回复 使用道具 举报
import java.io.*;
class  TextDemo
{
        public static void main(String[] args) throws IOException
        {
                    File f = new File("e:\\cyc\\Text1.txt") ; //把文件路径改了
            //    FileReader fr = new FileReader("ZhuanHuan.java");//错误1,参数是File类型的
                FileReader fr = new FileReader(f);
                LineNumberReader lin = new LineNumberReader(fr);
                while(true)
                {
                        int s = lin.read();
                        if(s==-1)
                                break;
                        else
                                System.out.print(lin.getLineNumber()+";;"+(char)s);//为什么这里做了强制转换了还是数字的啊
               
                }
                lin.close();
        }
}
/*在给定从中读取数据的文件名的情况下创建一个新 FileReader。
* public FileReader(File file)
           throws FileNotFoundException在给定从中读取数据的 File 的情况下创建一个新 FileReader。
           里面接受的参数接受的是一个File类型的数据*/

评分

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

查看全部评分

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