IO流加强之转换流字符编码转换演示(读,写)
来源:互联网 发布:软件开发和软件研发 编辑:程序博客网 时间:2024/06/05 17:41
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import org.junit.Test;
/*
*
/*字符流的编码与解码方案
* 1.采用filewriter以默认方式编码
FileOutputStream+默认编码表
* 2采用转换流以默认方式编码
OutputStreamWriter + FileOutputStream + 默认编码表
*3采用转换流以指定编码方式编码
OutputStreamWriter + FileOutputStream +指定编码表
*4采用转换流以指定编码方式解码
InputStreamReader + FileInputStream +指定编码
* 转换流:
* 1)数据转换
InputStreamReader: 该类本身是字符(Reader)系列, 功能:能够把字节输入流转换成字符输入流
OutputStreamWriter: 该类本身是字符(Writer)系列, 功能:能够把字符输出流转换成字节输出流
2)编码转换
能够对流数据进行字符编码转换
*/
public class TranfererStreamDemo {
/* 需求:模拟英文聊天程序,要求:
(1) 从键盘录入英文字符,每录一行就把它转成大写输出到控制台;
(2) 保存聊天记录到字节流文件。 */
@Test
public void demo1() throws IOException{
//需求1分析:
//键盘输入: System.in ---字节流
//处理字符数据,最好用字符流
//综上,把字节流转换成字符流处理比较好
//另外,要把字符按行处理,用缓冲流比较好。又因为已经转换成字符流,所以用字符缓冲流
//需求2分析:
//程序中目前的数据是字符数据,用字符流处理比较好
//同时,题目要求写到字节流文件,最终得用字节流写
//综上,把字符流转换成字节流处理比较好
//同理,想操作方便又速度快点,加字符流的缓冲
InputStreamReader isr = new InputStreamReader(System.in);//键盘输入字节流转化为字符流
BufferedReader br = new BufferedReader(isr);//缓冲流
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("chat.txt")
)
);
String str = null;
while((str = br.readLine())!=null){
str = str.toUpperCase();//将全部英文字符变化为大写
if(str.equals("over")){
break;
}
System.out.println(str);
//bw.write(str+"\n");//Linux方式。该方式用记事本不是换行显示,但写字板是
//bw.write(str+"\r\n");//windows方式。该方式用记事本和写字板都是换行显示
bw.write(str);
bw.newLine();//根据系统平台,自动添加(回车)换行
}
bw.close();//凡是字符流,都要记得刷缓存---close()方法在关闭的同时会刷一次缓存
}
/*
* 字符编码转换演示:读、写
*/
@Test //采用默认编码(当前MyEclipse中设置的是utf-8)
public void readDemo1() throws IOException{
BufferedReader br = new BufferedReader(
new FileReader("test_utf8.txt"));//正常显示
//
// BufferedReader br = new BufferedReader(
// new FileReader("test_gbk.txt"));//乱码
String str = null;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}
@Test //采用我们指定的编码来读---使用InputStreamReader
public void readDemo2() throws IOException{
//BufferedReader br = new BufferedReader(
// new InputStreamReader(
// new FileInputStream("test_gbk.txt")) ); //默认编码,乱码
//BufferedReader br = new BufferedReader(
// new InputStreamReader(
// new FileInputStream("test_utf8.txt"),"utf-8") ); //解决乱码
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("test_gbk.txt"),"gbk") ); //解决乱码
String str=null;
while( (str=br.readLine())!=null ){
System.out.println(str);
}
br.close();
}
@Test //采用默认编码(当前MyEclipse中设置的是utf-8)
public void writeDemo1() throws IOException{
BufferedWriter bw = new BufferedWriter(new FileWriter("test_0.txt"));//以默认编码写(当前MyEclipse设置的是utf-8)
String str = "好好学习";
bw.write(str);
bw.close();
}
@Test //以指定的编码进行(和系统的默认编码无关)
public void writeDemo2() throws IOException{
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test_1.txt")) );//以系统默认的编码写
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test1_gbk.txt"),"GBK") );//指定以GBK编码写 ----"gbk"和"GBK"等效不区分大小写
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test1_utf8.txt"),"UTF-8") );//指定以utf-8编码写
String str = "好好学习";
bw.write(str);
bw.close();
}
}
- IO流加强之转换流字符编码转换演示(读,写)
- IO流(转换流的字符编码)
- 【java基础】采用字节流的文件IO演示,字节流与字符流转换,转换流的编码解码
- IO流七:字符编码、转换流的字符编码、编码与解码、IO流练习
- IO之字节字符转换流
- java基础之IO转换流--OutputStreamWriter(字符流通往字节流,可以指定字符编码的IO流对象)
- IO流__【转换流的字符编码】【编码与解码】【字符编码-“联通”】
- IO流(字符流:转换流)
- IO-字节、字符转换流
- 简单的 io流文件复制(字符流编码乱码转换)
- IO之转换流
- IO之转换流
- IO流的读和写(转换成Base64字符输出)
- 22-IO流-26-IO流(转换流-需求演示)
- java基础--IO流之字节、字符和转换流
- java基础之IO流 字符转换流
- Java复习之IO字节字符转换流
- Java IO 转换流的编码解码
- sails.js 存放 Session 到 MySql @望云海
- 常用电工仪表的使用与测量误差的计算
- 数组的定义与使用
- 数据结构之单链表基本操作
- dp问题 滑雪
- IO流加强之转换流字符编码转换演示(读,写)
- MG loves apple HDU6020 BC #93-1002 思维题
- [蓝桥杯]-报数游戏
- 防止一个类被继承
- NYOJ37回文字符串
- request.setCharacterEncoding 、response.setContentType、response.setCharacterEncoding
- 如何使用MongoDB+Springboot实现分布式ID?
- golang学习笔记之引用类型与值类型
- Word Pattern问题及解法