/**====================================字符流=========================================
* 天生具备了处理字符的能力,是一种可以直接读取字符的高级流
=====================================================================================*/
public class CharIO {
private static final long LEVEL = 20150701;//码讲版本
//===============================标准字符流=======================================
/*
* 字符输出流OutputStreamWriter
*/
//@Test
public void testWriter() throws Exception{
FileOutputStream out = new FileOutputStream("osw_utf8.txt");
//OutputStreamWriter writer = new OutputStreamWriter(out);//使用默认字符集
OutputStreamWriter writer = new OutputStreamWriter(out,"UTF-8");//自定义字符集
String str = "测试用字符串";
writer.write(str);//按字节写
writer.write(str);
writer.close();
}
/*
* 字符输入流InputStreamReader
*/
//@Test
public void testReader()throws Exception{
FileInputStream in = new FileInputStream("osw_utf8.txt");
//InputStreamReader reader = new InputStreamReader(in);
InputStreamReader reader = new InputStreamReader(in,"UTF-8");//自定义字符集
// 1、按字符读
// int ch = -1;
// while((ch = reader.read())!=-1){
// System.out.print((char)ch);
// }
//
//2、按字符数组读
StringBuilder sb = new StringBuilder();
char[] chs = new char[1024];
int len = -1;
while((len = reader.read(chs))!=-1){
sb.append(chs, 0, len);
}
System.out.println(sb.toString());
reader.close();
}
/**
* 转换文件编码 读取UTF-8编码文件,转为GBK,再存入
* @throws IOException
*/
//@Test
public void transCharsetDemo() throws IOException{
transCharset("osw_utf8.txt","UTF-8","osw_GBK.txt","GBK");
}
private void transCharset (String srcName,String srcCharset,
String targetName,String targetCharset) throws IOException{
//TODO:只允许.txt类型文件
FileInputStream in = new FileInputStream(srcName);
InputStreamReader reader = new InputStreamReader(in,srcCharset);
FileOutputStream out = new FileOutputStream(targetName);
OutputStreamWriter writer = new OutputStreamWriter(out,targetCharset);
char[] chs = new char[1024];
int len = -1;
while((len = reader.read(chs))!=-1){
writer.write(chs, 0, len);
}
reader.close();
writer.close();
}
/**===============================Buffered字符流=======================================
* 以行为单位,快速读写字符串
* BufferedReader--PrintWriter(包装了BufferedWriter 提供自动行刷新)
=====================================================================================*/
/*
* 使用PrintWriter写入数据
*/
//@Test
public void testPrintWriter()throws Exception{
PrintWriter writer1 = new PrintWriter("print.txt","UTF-8");
writer1.println("测试PrintWriter");
writer1.println("测试PrintWriter");
//writer1.flush();//需要手动刷新才能print一行输出一行,即行刷新
writer1.close();
}
/*
* 使用PrintWriter构造方法进行流嵌套
*/
//@Test
public void testFlush()throws Exception{
//只嵌套字节流缺点:只能使用默认的字符集,不能指定字符集
//解决方法:转字节流为字符流嵌套给print即可
FileOutputStream out = new FileOutputStream("flush.txt");
//嵌套流方式创建优点:可以在创建时,显式的声明需要行刷新,
//则每println(注意不是print方法)一次都会自动进行行刷新,即自动调用flush方法
PrintWriter pw = new PrintWriter(out,true);//声明进行自动行刷新
Scanner scan = new Scanner(System.in);
String line = null;
while(true){
line = scan.nextLine();
if("exit".equals(line)){
System.out.println("退出!!");
break;
}
pw.println(line);//具备了自动行刷新
}
pw.close();
}
/*
* BufferedReader读取数据
* 读取将当前程序的源文件
*/
//@Test
public void testBufferedReader()throws Exception{
FileInputStream in = new FileInputStream("."+File.separator+"src"+
File.separator+"api"+File.separator+"CharIO.java");
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String str = null;
while((str = reader.readLine())!=null){//按行读取
System.out.println(str);
}
reader.close();
}
/*
* 按行读取键盘输入内容
*/
@Test
public void readUserLine() throws IOException{
BufferedReader lineReader = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while(true){
str = lineReader.readLine();
if("exit".equals(str)){
System.out.println("退出!!");
break;
}
System.out.println(str);
}
lineReader.close();
}
}
【Java】字符流
最新推荐文章于 2023-12-23 10:13:39 发布