当我们文件里面含有中文英文以及数字时,我们使用字节流将文件内容在内存中显示,英文和数字显示正常,而中文却显示乱码,这时候我们可以使用转换流将其转换为字符流显示在内存中。转换流是字符流和字节流之间的桥梁。InputStreamReader用于将字节输入流转换为字符输入流,OutputStreamWriter用于将字节输出流转换为字符输出流。使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集。
InputStreamReader实现将字节的输入流按指定字符集转换为字符的输入流,将InputStream转换为Reader
InputStreamReader(InputStream in):创建一个使用默认字符集的InputStreamReader
- FileInputStream fis=new FileInputStream("D:\\aaa\\helloworld.txt");
- InputStreamReader isr=new InputStreamReader(fis);
InputStreamReader(InputStream in,String charsetName):创建一个使用指定字符集的InputStreamReader
- FileInputStream fis=new FileInputStream("D:\\aaa\\helloworld.txt");
- InputStreamReader isr=new InputStreamReader(fis,"gbk");
InputStreamReader具体使用案例代码如下:
- //文件中原有内容:abcde我爱中国123
- FileInputStream fis1=new FileInputStream("D:\\aaa\\helloworld.txt");
- InputStreamReader isr=new InputStreamReader(fis1,"utf-8");
- int ch;
- while((ch=isr.read())!=-1) {
- System.out.print((char)ch);
- }
- isr.close();
- //输出:abcde我爱中国123
OutputStreamWriter实现将字符的输出流按指定字符集转换为字节的输出流,将Writer转换为OutputStream
OutputStreamWriter(OutputStream out):创建使用默认字符编码的OutputStreamWriter
- FileOutputStream fos2=new FileOutputStream("D:\\aaa\\helloworld.txt");
- OutputStreamWriter osw=new OutputStreamWriter(fos2);
OutputStreamWriter(OutputStream out,String charsetName):创建使用指定字符编码的OutputStreamWriter
- FileOutputStream fos2=new FileOutputStream("D:\\aaa\\helloworld.txt");
- OutputStreamWriter osw=new OutputStreamWriter(fos2,"utf-8");
OutputStreamWriter具体使用案例代码如下:
- FileOutputStream fos2=new FileOutputStream("D:\\aaa\\helloworld.txt");
- OutputStreamWriter osw=new OutputStreamWriter(fos2,"utf-8");
- osw.write("我是中国人");
- osw.write(65);
- osw.write(66);
- char[] c=new char[] {'1','2','3'};
- osw.write(c);
- osw.close();
- //文件中写入:我是中国人AB123