问题描述
//代码如下,try块没有写。InputStream is = is = new FileInputStream("test.txt");int len;byte[] b = new byte[20];while((len = is.read(b)) != -1){System.out.write(b, 0, len);} 下面这段文字为test.txt文件的内容,Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 运行后,多数情况能输出正常,但是偶尔会有部分乱码。如下。 请问为什么? Java是一种可以���写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言���Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
解决方案
因为你是按byte读取的,所以可能会出现字符集问题。原因是byte[20] 而你的文本包含了中文字符和数字字母,因此一个汉字可能会只读取到了其中部分你可以在while循环外创建个ByteArrayOutputStream 在while循环内拼接,最后输出。public static void main(String[] args) throws Exception {InputStream is = new FileInputStream("/Users/yz/test.txt");int len;byte[] b = new byte[20];ByteArrayOutputStream baos = new ByteArrayOutputStream();while((len = is.read(b)) != -1){baos.write(b, 0, len);}System.out.write(baos.toByteArray());}你也可以用char指定编码的方式去读取,记得设置编码。public static void main(String[] args) throws Exception {InputStream is = new FileInputStream("/Users/yz/test.txt");BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));String str = "";while((str=br.readLine())!=null){System.out.println(str);}}