JavaIO读取_写入文件中文乱码问题解决Java认证考试
文章作者 100test 发表时间 2010:02:02 16:46:29
来源 100Test.Com百考试题网
读取: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(File file), "UTF-8")).
写入: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File file), "UTF-8")).
不包BufferedWriter和BufferedReader一层,也可以达到解决中文乱码问题的目的.
参考下面J2SE6中关于 InputStreamReader 和 OutputStreamWriter 的解析
*************************************************************
public class OutputStreamWriterextends Writer
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
Writer out
= new BufferedWriter(new OutputStreamWriter(System.out)).
代理对 是一个字符,它由两个 char 值序列表示:高 代理项的范围为 \uD800 到 \uDBFF ,后跟范围为 \uDC00 到 \uDFFF 的低 代理项。
错误代理元素 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。
此类总是使用字符集的默认替代序列 替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。
*******************************************************************
public class InputStreamReaderextends Reader
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in
= new BufferedReader(new InputStreamReader(System.in)).