转换流InputStreamReader
和 OutputStreamWriter
基本介绍:
转换流就是将字节转换成字符流的过程,并且在可以构造器中传入编码,解决中文乱码问题
案例:
使用读取文件引起的乱码问题
package IO_.transformation;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @author: 海康
* @version: 1.0
*/
public class CodeQuestion {
public static void main(String[] args) throws IOException {
String readPath = "e:\\IDEACODE\\javase\\new2.txt";
BufferedReader br = new BufferedReader(new FileReader(readPath));
// 下面使用的一整行一整行的读取
String s = "";
while (( s = br.readLine())!= null){
System.out.println(s);
}
// 在使用完流后一定要关闭流,释放资源
if (br != null){
br.close();
}
}
}
InputStreamReader
类
继承关系图及构造器
构造器
Constructor and Description |
---|
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader。 |
InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的InputStreamReader。 |
InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。 |
常用方法
Modifier and Type | Method and Description |
---|---|
void | close() 关闭流并释放与之相关联的任何系统资源。 |
int | read() 读一个字符 |
int | read(char[] cbuf, int offset, int length) 将字符读入数组的一部分。 |
boolean | ready() 告诉这个流是否准备好被读取。 |
案例演示 将字节转成字符流解决中文乱码问题
package IO_.transformation;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author: 海康
* @version: 1.0
*/
public class InputStreamReader1 {
public static void main(String[] args) throws IOException {
// 将字节流转成字符流,并且解决中文乱码问题
String filePath = "e:\\IDEACODE\\javase\\new2.txt";
// 转成字符流
InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath),"utf-8");
// 将其包装成BufferedReader
BufferedReader br = new BufferedReader(isr);
// 使用方式是整行的读取
String line = "";
while ((line = br.readLine())!=null){
System.out.println(line);
}
// 在读取完毕一定要关闭流,在关闭流只需要关闭外层流即可
if (isr != null){
isr.close();
}
}
}
OutputStreamWriter
类
继承关系图及构造器
构造器
Constructor and Description |
---|
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。 |
常用方法
Modifier and Type | Method and Description |
---|---|
void | close() 关闭流,先刷新。 |
void | flush() 刷新流。 |
void | write(char[] cbuf, int off, int len) 写入字符数组的一部分。 |
void | write(int c) 写一个字符 |
void | write(String str, int off, int len) 写一个字符串的一部分。 |
案例演示:将数据写入指定文件中,并将字节流转成字符流的方式处理
package IO_.transformation;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
/**
* @author: 海康
* @version: 1.0
*/
public class OutputStreamWriter1 {
public static void main(String[] args) throws IOException {
String filePath = "e:\\IDEACODE\\javase\\haikang.txt";
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath,true),"utf-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("湛江广州");
// 在使用完流一定要关闭流释放资源
if (bw != null){
bw.close();
}
System.out.println("写入成功!!!");
}
}