黑马程序员技术交流社区

标题: 字节数组转字符串输出的问题 [打印本页]

作者: 龙乾坤    时间: 2012-5-2 00:54
标题: 字节数组转字符串输出的问题
        FileReader fr=new FileReader("java.txt");
        byte[] b=new byte[1024];
                int len=0;
                while((len=fr.read())!=-1){
              System.out.println(new String(b,0,len));
为什么输出的时候不是文件中的内容呢?而是一些正方形啊


作者: 何阳    时间: 2012-5-2 01:40
FileReader fr=new FileReader("java.txt");
         //输入流读取的是字符,不是字节,应该修改为char[] b=new char[1024];
        byte[] b=new byte[1024];
        int len=0;
       //既然你定义了一个容器数组,为了提高效率,但是你并没用他,应修改为while((len=fr.read(b))!=-1)
      //你这样是每次读取一个字符,不能使用String(char [] a,0,len)的方法,
      
      while((len=fr.read())!=-1){
              System.out.println(new String(b,0,len));

作者: 贾联国    时间: 2012-5-2 01:47
本帖最后由 贾联国 于 2012-5-2 01:53 编辑

读字符流的数据用字节流的while((len=fr.read())!=-1)是不合适的
最好用缓冲BufferedReader 进行字符文件的操作,因为BufferedReader
里面有readLine
所以我们选择用什么流的时候要明确源和目的
附上正确写法:

import java.io.*;
class  ReadDemo
{
        public static void main(String[] args) throws IOException
       {
                FileReader fr=new FileReader("java.txt");
                 char[] b=new char[1024];
                int len=0;
                while((len=fr.read(b))!=-1)
                {
                       System.out.println(new String(b,0,len));
                }
  
        }
}
我们不推荐上面的写法,推荐下面的写法:

import java.io.*;
class  ReadDemo
{
        public static void main(String[] args) throws IOException
        {
                BufferedReader  buf=new BufferedReader (new FileReader("java.txt"));
                String line =null;
                while((line=buf.readLine())!=null)
                                {
                                        System.out.println(line);
                                }
               
        }
}
作者: 罗旭维    时间: 2012-5-2 08:37
这里关键是用的FileReader,这是字符流,
所以你用read()读出的是一个字符,
我想你的本意是读出一串数组大小的字符,
这里你首先是要把byte[] b=new byte[1024];改成char[] b=new byte[1024] ;
然后你需要用read(b)这个读方法。
作者: 张小锋    时间: 2012-5-2 11:53
    对于楼主的问题,漏洞不少,我就将错就错,就用楼主的代码分析分析
  public static void main(String[] args)throws Exception {
                FileReader fr=new FileReader("F:\\a.txt");
        byte[] b=new byte[1024];//此处数组元素默认1024个0
                int len=0;
                while((len=fr.read())!=-1){//此处没有给b赋值,只是从文本里单个读取字符转换成int型
                        //System.out.println(len);//为了证明上一句。
                //        System.out.println((char)len);//强制转换还原成字符型,还是为了证明上一句
              System.out.println(new String(b,0,len));
              //因为一直没有给b重新赋值,所以此处表明的将b转换成字符串,因为0转换成字符就刚好是那个方块,个数就是当前字符转换成int型的数
               }
        }
其实这块代码打印的结果确实没什么意义,只是对代码的错误分析分析。




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