Java中的readLine()方法是读取文件或者从标准输入流中读取数据的常用方法之一,在读取中文字符时有可能出现乱码的问题,下面讲解如何使用Java来解决readLine()乱码的问题。
问题描述
在Java中使用readLine()方法读取文件或者从标准输入流中读取数据时,如果输入的数据中含有中文字符,使用String类型读取的时候常常出现乱码的问题。
解决方案
在Java中,解决readLine()乱码的问题主要有两种方法,分别是InputStreamReader和ByteArrayInputStream。
1.使用InputStreamReader
使用InputStreamReader可以将字节流转换为字符流,避免直接读取字节流造成的乱码问题。示例代码如下:
public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "UTF-8"));
String line = null;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在示例代码中,我们使用了BufferedReader类和InputStreamReader类来读取文本文件。在创建InputStreamReader对象时传递了UTF-8的编码方式,从而避免出现乱码的情况。
2.使用ByteArrayInputStream
使用ByteArrayInputStream可以构造一个字节数组输入流,然后使用InputStreamReader将字节流转换为字符流进行读取。示例代码如下:
public static void main(String[] args) {
try {
String str = "测试";
byte[] byteArray = str.getBytes("UTF-8");
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
InputStreamReader inputStreamReader = new InputStreamReader(byteArrayInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在示例代码中,我们首先将字符串转成字节数组,使用ByteArrayInputStream构造一个字节数组输入流,然后使用InputStreamReader将字节流转换为字符流进行读取。在创建InputStreamReader对象时传递了UTF-8的编码方式,从而避免出现乱码的情况。
总结
使用Java的readLine()方法读取文件或者从标准输入流中读取数据时,如果输入的数据中含有中文字符,使用String类型读取的时候常常出现乱码的问题。可以使用InputStreamReader和ByteArrayInputStream来解决这个问题,具体来说,使用InputStreamReader可以将字节流转换为字符流,避免直接读取字节流造成的乱码问题;使用ByteArrayInputStream可以构造一个字节数组输入流,然后使用InputStreamReader将字节流转换为字符流进行读取,同样能够避免出现乱码的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 使用readLine() 乱码的解决 - Python技术站