Java-IO流-字符流

  • #字符流的操作(Reader、Writer)

@继承框架

Reader //操作了Closeable接口,因此可以同自动关闭资源语法代替手动调用close()方法
    StringReader
    CharArrayReader
    InputStreamReader
        FileReader
    BufferedReader

Writer  //操作了Closeable接口
    StringWriter
    CharArrayWriter
    PrintWriter
    OutputStreamWriter
        FileWriter
    BufferedWriter

@Reader、Writer的基本用法

1.Reader操作了Closeable, Readable接口的抽象类,其下有close(), read()两个抽象方法。

2.Writer操作了 Appendable, Closeable, Flushable接口的抽象类,其下有close(), write(), flush()三个抽象方法。

---> Demo举例


import static java.lang.System.out;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.FileReader;
import java.io.StringWriter;

class ActionOfCharIO{
	public static void copy(Reader src, Writer dest) throws IOException{
		char data[] = new char[2048];
		int len;
		try(Reader input = src; Writer output = dest){
			while( (len = input.read(data)) != -1){
				output.write(data, 0, len);
			}
		}
	}
}
public class Temp{
	public static void main(String... args) throws IOException{   
		FileReader reader = new FileReader(args[0]);
		StringWriter writer = new StringWriter();
		ActionOfCharIO.copy(reader, writer);
		out.println(writer.toString());
   }
}

@Reader、Writer常用的子类

1.StringReader可以将字符串打包,当做读取来源;StringWriter可以作为写入的目的地,最后用toString()方法取得所有写入的字符所组成的字符串。

2.CharArrayReader、CharArrayWriter类似地则是以char数组作为读取的来源或写入的目的地。

3.FileReader、FileWriter,对文档实现读取和写入。读取或写入时默认会使用当前操作系统的默认编码来做字符转换,当然也可以在启动JVM时自行指定编码格式。如下,指定编码为UTF-8:

java -Dfile.encoding=UTF-8  要运行的字节码文件名

 但是,FileReader、FileWriter并没有提供指定编码的调用,如果在程序执行过程中要指定编码格式,则必须使用InputStreamReader、OutputStreamWriter这两个装饰器类。

@字符流的打包器(装饰器)

1.InputStreamReader与OutputStreamWriter,自定义将字节数据转换为指定编码格式的字符。

创建InputStreamReader与OutputStreamWriter时,可以指定编码,如果没有指定编码,则以JVM启动时所获取的默认编码为准。

---> Demo举例


import static java.lang.System.out;
import java.io.*;

public class Temp{
	public static void copy(Reader src, Writer dest) throws IOException{
		char data[] = new char[2048];
		int len;
		try(Reader input = src; Writer output = dest){
			while( (len = input.read(data)) != -1){
				output.write(data, 0, len);
			}
		}
	}
	public static void copy(InputStream src, OutputStream dest, String charSet) throws IOException{
		copy(new InputStreamReader(src, charSet), new OutputStreamWriter(dest, charSet));
	}
	
	public static void main(String... args) throws IOException{  
        //通过System.getProperty("file.encoding")获取系统的默认编码格式; 也可以指定其它的,如:UTF-8;
		copy(new FileInputStream(args[0]), new FileOutputStream(args[1]), System.getProperty("file.encoding"));
   }
}

2.BufferedReader与BufferedWriter,为Reader或Writer提供缓冲区,提高部分效率。

3.PrintWriter,对OutputStream、Writer等进行打包,提供print()、println()、format()等方法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值