黑马程序员技术交流社区
标题:
字节流打印文本内容问题
[打印本页]
作者:
侯丛政
时间:
2013-3-4 06:20
标题:
字节流打印文本内容问题
本帖最后由 侯丛政 于 2013-3-4 06:22 编辑
有没有什么办法能让 FileOutputStream 的 read(byte[] bytes) 方法不出乱码的打印出文本文件中的内容 ?
FileInputStream fis = new FileInputStream("fis.txt");
byte[] bys = new byte[
2
]; // 定义byte[1024]也会出现乱码的情况. 这里就用一个较小值
int len = 0;
while((len = fis.read(bys)) != -1){
String str = new String(bys, 0, len);
System.out.println(str);
}
fis.close();
作者:
克零岚
时间:
2013-3-4 09:15
我在eclipse上试了试,结果如下:
FileInputStream fis = new FileInputStream("fis.txt");
<font color="red">byte[] bys = new byte[2]; </font> // 让你的文本中既有字母数字又有汉字,那么强烈建议果断使用字符输入输出流FileReader
int len = 0; //byte类型是一个字节,而读取汉字的时候基本单位为两个字节,
while((len = fis.read(bys)) != -1){ //这时如果运行程序的话,很可能就会出现一个汉字只读了一个字节,结果乱码出现!
String str = new String(bys, 0, len);
System.out.println(str); //如果楼主很清楚read(byte[])的定义的话,上面很容易看懂
} //read(byte[])定义:<font color="red">从当前输入流读取一定的bys数据,并保存在byte数组中</font>,然后返回读取bytes数据的数
fis.close(); //量,若达到流末尾则返回-1;到这里上面汉字只读一个字节的情况就容易解释了:fis.read(bys)每执行一次,
//就会一次性读取bys个字节的数据,如果读取到的数据的末尾只是某一个汉字的一个字节,这时候执行while循环里的语句,就会输出半个汉字的数据,当然是乱码了
复制代码
作者:
王智威
时间:
2013-3-4 09:43
在中文输出是时候,一般是要考虑码编表的所以我建议你转换流。
FileInputStream fis = null;
fis = new FileInputStream("fis.txt");
InputStreamReader isr=new InputStreamReader(fis,"gbk");
这样就可以设置读取的时候的编码表
如何写中文的时候也一样建议也用转换流,也是因为编码表问题
作者:
王智威
时间:
2013-3-4 09:49
public static void main(String[] args) throws Exception {
FileInputStream fis = null;
fis = new FileInputStream("D:\\fis.txt");
InputStreamReader isr=new InputStreamReader(fis,"gbk");//这里用转换流
char[] bys = new char[2];
int len = 0;
while((len = isr.read(bys)) != -1){
String str = new String(bys, 0, len);
System.out.println(str);
}
isr.close();
}
我帮你改了一个就可以用了,不知道是不是你要的意思。
作者:
唐长智
时间:
2013-3-4 10:01
FileInputStream fis = new FileInputStream("fis.txt");
byte[] bys = new byte[2]; // 定义byte[1024]也会出现乱码的情况. 这里就用一个较小值
int len = 0;
while((len = fis.read(bys)) != -1){
String str = new String(bys, 0, len);
//哥们,看这里看这里看这里:你没有把整个byte数组传给String啊,最后这个参数应该是bys.length不是len啊。你肯定是用eclipse直接敲进去了,防止粗心,换个编辑器。
System.out.println(str);
}
fis.close();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2