io流之转换流
先知:
Java IO流中提供了两种用于将字节流转换为字符流的转换流。
其中InputStreamReader用于将字节输入流转换为字符输入流,
其中OutputStreamWriter用于将字节输出流转换为字符输出流
作用:使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集
1、OutputStreamWriter,将字节输出流转换为字符输出流。创建使用指定字符集的 OutputStreamWriter,如果不指定字符集就使用默认字符集创建OutputStreamWriter。转换之后可以不用关闭OutputStream
2、InputStreamReader,将字节输入流转换为字符输入流。创建使用指定字符集的 InputStreamReader,如果不指定字符集就使用默认字符集创建InputStreamReader。转换之后可以不用关闭InputStream
package com.Lucky.io.ConvertStream;
import java.io.*;
import java.nio.charset.Charset;
/*
转换流: inputStreamReader -->字符转换输入流
outputStreamWriter-->字符转换输出流
作用:1.指定编码格式读写数据【JDK11以后就被淘汰了】
2.字节流想用字符流的方法
*/
/**
* 字节转换流:读取
*
* 每天一个小知识:查看文件的编码格式--》打开文件,另存为,看到ANSI就是GBK
*
*/
public class demo1 {
public static void main(String[] args) throws IOException {
System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
InputStreamReader inStrReader=
new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"GBK");
int val;
while ((val=inStrReader.read())!=-1){
//乱码:因为该路径的文件是UFT-8编码格式的数据,而我们将编码格式改为了GBK,所以出现了乱码
System.out.print((char)val);
}
inStrReader.close();
System.out.println();
System.out.println("----------------要掌握的写法:-----------------------");
FileReader reader=
new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt",Charset.forName("GBK"));
int gbk;
while ((gbk=reader.read())!=-1){
System.out.print((char)gbk);
}
reader.close();
}
}
package com.Lucky.io.ConvertStream;
import java.io.*;
import java.nio.charset.Charset;
/**
* 字节转换流:写出
*/
public class demo2 {
public static void main(String[] args) throws IOException {
System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
OutputStreamWriter inStrWriter=
new OutputStreamWriter(new FileOutputStream(
"H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),
"UTF-8");
inStrWriter.write("你好!唯易");
inStrWriter.close();
System.out.println();
System.out.println("----------------要掌握的写法:-----------------------");
FileWriter write=
new FileWriter(
"H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\GBKdata.txt",
Charset.forName("GBK"));
write.write("你好!唯易");
write.close();
}
}
注意点: 以上使用的不是转换流的常用形式
转换流的应用场景:字节流想要使用字符流的方法
综合小练习:
package com.Lucky.io.ConvertStream;
/*
利用字节流读取纯文本文件,还要一次读取一行【不能出现乱码】
*/
import java.io.*;
/**
* 分析: ①用字节流读取纯文本文件会出现乱码②一次要读取一行【满足要求的只有字符缓冲流】
* ③乱码情况要考虑④结合条件知道要使用--》字节流/字符缓冲流/字符转换流
*/
public class byteStreamfindFile {
public static void main(String[] args) throws IOException {
System.out.println("---------初级写法----------");
//字节输入流
InputStream inputStream=
new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt");
//字符转换输入流
InputStreamReader inReader=new InputStreamReader(inputStream);
//字符缓冲流
BufferedReader bufReader=new BufferedReader(inReader);
String str;
while ((str=bufReader.readLine())!=null){
System.out.println(str);
}
bufReader.close();
}
}
package com.Lucky.io.ConvertStream;
import java.io.*;
import java.nio.charset.Charset;
/*
将内容为UTF-8编码格式文件转换--》GBK编码格式文件
*/
public class convertData {
public static void main(String[] args) throws IOException {
System.out.println("------了解即可:在JDK11的时候就被淘汰了-----------");
// InputStreamReader inReader=
// new InputStreamReader(new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt"),"UTF-8");
// OutputStreamWriter outWriter=
// new OutputStreamWriter(new FileOutputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt"),"GBK");
//
// int val;
// while ((val=inReader.read())!=-1){
// outWriter.write(val);
// }
// outWriter.close();
// inReader.close();
System.out.println("----------------要掌握的写法:-----------------------");
FileReader Freader=new FileReader("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\convert.txt", Charset.forName("UTF-8"));
FileWriter Fwriter=new FileWriter("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\ConvertStream\\gbkConvert.txt", Charset.forName("GBK"));
int str;
while ((str=Freader.read())!=-1){
Fwriter.write(str);
}
Fwriter.close();
Freader.close();
}
}
浙公网安备 33010602011771号