CharacterStream字符流

CharacterStream

  • 当使用字节流读取文本时,可能会有一个问题,就是遇到中文字符时,可能不会显示完整的字符。
  • 那是因为一个中文字符可能占用多个字节存储。所以,Java提供一些字符流类,以字符为单位读写数据
  • 专门用于处理文本文件
  • 字符输入流Reader
  • java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到JVM中。
  • 它定义了字符输入流的基本共性功能方法
  • void close();关流
  • int read();
  • int read(char[]cbuf);从输入流读取一些字符,并将它们存储到字符数组中
  • FileReader类
  • java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
  • 1.字符编码:字节与字符的对应规则。Windows中文系统的中文编码默认的是GBK编码
  •  在eclipse中,我们通常会设置默认utf-8编码
    
  • 2.字节缓冲区:一个字节数组,用来临时存放字节数据。
  • 构造方法:
  • FileReader(File file);创建一个新对象,给定要读取的File对象
  • FileReader(String name);创建一个新对象,给定要读取的字符串表示
  • 当创建一个文件字符读取流对象时,必须传入一个文件路径,类似于FileInputStream

*/

package SE04.n3CharacterStream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo01CharacterStream {
	public static void main(String[] args) throws IOException {
	File f=new File("folder\\io\\FR");
	if(!f.exists()) {f.mkdirs();}
	File f1=new File(f,"f1.txt");
	if(!f1.exists()) {f1.createNewFile();}
	FileReader fr1=new FileReader(f1);
//	0.读前要写点东西,稍后讲字符输出流
//	读取字符数据:
//	1.读取字符:read方法,每次可以读取一个“字符”的数据,提升为int类型,读取到文件末尾,返回-1,循环读取
	int read;
	while((read=fr1.read())!=-1) {
		System.out.print((char)read);
	}
	
//	2.使用字符数组读取:read(char[]cbuf),每次读取b的长度个字符到数组中,
//	返回读取到的有效字符个数,读取到末尾时,返回-1
	FileReader fr2=new FileReader(f1);
	int lens;
	char c[]=new char[2];
	while((lens=fr2.read(c))!=-1) {
		System.out.print(new String(c,0,lens));
	}
	
	fr2.close();
	fr1.close();
	
	}
}

/*

  • 字符输出流Writer
  • java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地,它定义了
  • 字节输出流的基本共性功能方法
  • void write(int c);写出单个字符
  • void write(char[] cbuf);写出字符数组
  • abstract void write(char[] cbuf,int off,int len);写出字符数组的某一部分,off是数组的开始索引,
  • len是写的字符个数
  • void write(String str);写出字符串
  • void write(String str,int off,int len);写出字符串的某一部分,off是字符串的开始索引,len是写的字符个数
  • void flush();刷新该流的缓冲
  • void close();关闭此流,会先刷新它
  • FileWriter类
  • java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
  • 构造方法:
  • FileWrite(File file)创建一个新的对象,给定要写出的File
  • FileWrite(String name)创建一个新的对象,给定要写出的File的字符串表示
  • 当你创建一个流对象时,必须传入一个文件路径,类似于FileOutputStream
    */
package SE04.n3CharacterStream;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Demo02Writer {
	public static void main(String[] args) throws IOException {
		File file=new File("folder\\io\\FR\\f1.txt");
		FileWriter fw=new FileWriter(file);
		File file2=new File("folder\\file\\登黄鹤楼.txt");
		FileReader fr=new FileReader(file2);
//		1.写出字符:write(int b)方法:每次可以写出一个字符数据
		for (int i = 100; i < 120; i++) {
			fw.write(i);
		}
		int len;
		char c[]=new char[1024];
		while((len=fr.read(c))!=-1) {
			fw.write(c,0,len);
		}
		
		fr.close();//后开先关
		fw.close();//先开后关
		
	}
}

IO流的异常处理

package SE04.n3CharacterStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo03HandleException {
	public static void main(String[] args) throws IOException {
//		IO流抛异常
		
//		方法一:FileInputStream写在try外面,在finally对关流进行异常处理
		FileInputStream fis=null;
		try {
			fis=new FileInputStream(new File("folder\\io\\a.txt"));
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				fis.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
//		方法二:把要抛异常的语句写在括号里,不需要关流
		try(FileInputStream fis1=new FileInputStream(new File("folder\\io\\b.txt"));){
			
		}catch(Exception e) {
			
		}
		
//		方法三:把要抛异常的语句抛出去
		FileInputStream fis2=new FileInputStream("");
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值