黑马程序员技术交流社区
标题:
字节数组转字符串输出的问题
[打印本页]
作者:
龙乾坤
时间:
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