//代码如下,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循环内拼接,最后输出。
[code="java"]
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());
}
[/code]
你也可以用char指定编码的方式去读取,记得设置编码。
[code="java"]
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);
}
}
[/code]