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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 行如止水 中级黑马   /  2013-8-29 18:18  /  1573 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-5 20:29 编辑

这是我写的一个读文件的代码:
  1. import java.io.*;
  2. public class ReadFile {

  3.         public static void main(String[] args) throws Exception{
  4.                 File file = new File("./exercise.txt");
  5.                 InputStream input = new FileInputStream(file);
  6.                 byte[] b = new byte[5];
  7.                 while(input.read(b) != -1){
  8.                         System.out.print(new String(b));
  9.                 }
  10.                 input.close();
  11.         }
  12. }
复制代码
这个代码能读英文内容,但是读中文内容的时候就会出现乱码,求解释以及解决办法。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
兄弟  你好:
   byte[] b = new byte[5];  可能是这样啊 由于你的数组长度很短,造成的数据溢出,而你的中文又太多。你可以   更改一下  byte[] b = new byte[100];      测试一下  。除此之外可能是 你的开发工具的问题 希望对你有帮助。。。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
你的文件存和读要统一编码。把文件另存为改下编码试试。
回复 使用道具 举报
造成这种情况有两方面原因:最主要原因,数组太短,一个汉字可能有多个字节,一次读6个字节然后根据编码表转换成字符,可能出现整好到一个字哪里被断开然后就转换成了字符,容易出现乱码~~
还有一个原因是,文档的编码表不是你机子里的默认编码表~~

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
第一 :不是  while(input.read(b) != -1){
  而是while((input.read(b))!=-1)(你判断条件都错了)
第二 能简写尽量简写
---InputStream is =new InputStream(new File(E:132.txt))
前提是在你能理解的情况下
回复 使用道具 举报
sorry 兄弟 是我错啦
你的判断条件是对的
你的错误在于不该用字节流对象,得用字符流对象FileReader。因为你的内容是中文的。不知道你知不知道关于编码表的事,这可能和编码表有关,中文的默认编码表是jbk,而字节流对象可能用的是其他编码表, 对码混乱,导致乱码
个人意见,请前辈指正!!

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
建立缓冲区的大小一般是2的次幂,一般设为512,或者1024,代码没有问题,一楼说的很有道理,还有读取字符的话一般用FileReader,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马