34、IO流——字符流InputStreamReader、OutputStreamWriter类

InputStreamReader

构造方法
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader

InputStreamReader(InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader

成员方法

使用

//创建InputStreamReader对象
InputStreamReader inputStreamReader= new InputStreamReader(new FileInputStream("isr.txt"));
//一次读取一个字符
int ch = 0;
while ((ch = inputStreamReader.read())!=-1) {
	System.out.print((char)ch);
}

//一次读取一个字符数组
char[] cs=new char[1024];
int length=0;
while ((length=isr.read(cs))!=-1) {
	System.out.println(new String(cs, 0, length));
}
		
//释放资源
inputStreamReader.close();

OutputStreamWriter

构造方法
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter

OutputStreamWriter(OutputStream out, Charset cs)
创建使用给定字符集的 OutputStreamWriter

成员方法
void close()
关闭此流,但要先刷新它
关闭之后,流对象不可继续使用

void flush()
刷新该流的缓冲
把未填满缓冲区的数据写入到目的地文件上,刷新后,流对象可继续使用
看情况添加

使用

//创建对象
OutputStreamWriter outputStreamWriter= 
	new OutputStreamWriter(new FileOutputStream("osw.txt"),"UTF-8");
		
//写数据
outputStreamWriter.write("中国您好");
		
//flush() 
//outputStreamWriter.flush();
		
//释放资源
outputStreamWriter.close();

BufferedWriter

成员方法
public BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流

public void write(String str)throws IOException写入字符串
参数:str - 要写入的字符串

使用

BufferedWriter bufferedWriter= new BufferedWriter(new FileWriter("bw.txt"));
bufferedWriter.write("我ai中国");
bufferedWriter.write("ni");
bufferedWriter.write("好吗");
bufferedWriter.close();

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了

构造方法
public BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流

使用

BufferedReader bufferedReader = new BufferedReader(new FileReader("bw.txt"));

// 一次读取一个字符
int ch = 0;
while ((ch=bufferedReader.read())!=-1) {
System.out.print((char)ch);
}

// 一次读取一个字符数组
char[] chs = new char[1024];
int length = 0;
while ((length = bufferedReader.read(chs)) != -1) {
	System.out.print(new String(chs, 0, length));
}
bufferedReader.close();

字符缓存流的特殊方法

BufferedReader
public String readLine() throws IOException
读取一个文本行
通过下列字符之一即可认为某行已终止:换行 (’\n’)、回车 (’\r’) 或回车后直接跟着换行
返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

BufferedWriter
public void newLine() throws IOException
写入一个行分隔符
行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 (’\n’) 符

例如

public static void main(String[] args) throws IOException {
	write();
	read();
}
	
public static void write() throws IOException{
	//创建字符缓冲输出对象
	BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bw2.txt"));
	for (int i = 0; i < 10; i++) {
		bufferedWriter.write("hello"+i);
		bufferedWriter.newLine();//根据系统来决定换行符
		bufferedWriter.flush();
	}
	bufferedWriter.close();
}
	
public static void read() throws IOException{
	BufferedReader bufferedReader = new BufferedReader(new FileReader("bw2.txt"));
	String line = null;
	while ((line=bufferedReader.readLine())!= null) {
		System.out.println("line: "+line);
	}
}

复制:

BufferedReader bufferedReader= new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufferedWriter= new BufferedWriter(new FileWriter("d.txt"));

String line = null;
while ((line = bufferedReader.readLine())!=null) {
	bufferedWriter.write(line);
	bufferedWriter.newLine();
	bufferedWriter.flush();
}
		
bufferedReader.close();
bufferedWriter.close();

使用转换流有些繁琐,Java提供简单的类

FileReader

构造方法
public FileReader(File file) throws FileNotFoundException
在给定从中读取数据的 File 的情况下创建一个新 FileReader

FileWriter

构造方法
public FileWriter(File file) throws IOException
根据给定的 File 对象构造一个 FileWriter 对象

使用

//创建FileReader对象
FileReader fileReader= new FileReader("a.txt");
//创建FileWriter对象
FileWriter fileWriter= new FileWriter("b.txt");

//一次一个字符数组
char[] chs = new char[1024];
int length = 0;
while ((length=fileReader.read(chs))!= -1) {
	fileWriter.write(chs, 0, length);
	fileWriter.flush();
}
		
//释放资源
fileReader.close();
fileWriter.close();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值