处理流之二 转换流
字节输入流转换为字符输入流
package demo10;
import java.io.*;
//InputStreamReader: 将一个字节的输入流转换为字符的输入流
//OutputStreamWriter: 将一个字符的输出流转换为字节的输出流
public class TransferTest {
public static void main(String[] args) throws IOException {
//字节流处理了一个txt
FileInputStream fis = new FileInputStream("hello.txt");
//将字节输入流转换为字符输入流
// InputStreamReader isr = new InputStreamReader(fis);
//使用UTF-8字符集
//具体使用哪个字符集 看txt保存的时候用的哪个
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
char[] c = new char[1024];
int len;
while ((len = isr.read(c))!=-1){
System.out.println(new String(c,0,len));
}
isr.close();
}
}
这里我们如果用gbk去解码,肯定不对,会出现乱码。
综合使用转换流
package demo10;
import java.io.*;
//InputStreamReader: 将一个字节的输入流转换为字符的输入流
//OutputStreamWriter: 将一个字符的输出流转换为字节的输出流
public class TransferTest {
public static void main(String[] args) throws IOException {
File f1 = new File("hello.txt");
File f2 = new File("hello_gbk.txt");
FileInputStream fis = new FileInputStream(f1);
FileOutputStream fos = new FileOutputStream(f2);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");
char[] c = new char[1024];
int len;
while ((len = isr.read(c)) != -1){
osw.write(c,0,len);
}
isr.close();
osw.close();
}
}
我们字节流输入,被字节转字符包住,用字符数组接收,在用OutputStreamWriter字符转字节包住的字节流输出出去,并且输出为gbk编码字符集编码的文本。
字符集
标准输入输出流
package demo10;
import java.io.*;
public class TransferTest {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true){
System.out.print("请输入字符串:");
String data = br.readLine();
if ("e".equalsIgnoreCase(data)||"exit".equalsIgnoreCase(data)){
System.out.println("程序结束");
break;
}
String s = data.toUpperCase();
System.out.println(s);
}
br.close();
}
}
System.in是字节流,所以有些情况需要转换。