JavaIO字符输出流&输入流

Writer类

Writer类是所有处理字符输出的超类,其下面有多个子类继承,主要作用于对文件的写操作。
Writer类有以下两个构造方法

protected Write(){}	空参构造,创建一个新的字符流
protected Write(Object lock){}	有参构造,创建一个新的字符流并指定一个Object类型的参数

FileWriter

此类继承了OutputStreamWriter类,而OutputStreamWriter类又继承了Writer父类,默认继承了所有的方法,用于对文件进行写的操作。

构造器

//根据给定的字符串名称作为目标文件的路径
public FileWriter(String fileName) throws IOException {
      super(new FileOutputStream(fileName)); //继承父类的构造
}
//根据给定的字符串名称作为目标文件的路径,并且是否可以追加内容到文本,ture表示可以,false不行
public FileWriter(String fileName, boolean append) throws IOException {
 	 super(new FileOutputStream(fileName, append));  //继承父类的构造
}
//根据一个File对象指定路径
public FileWriter(File file) throws IOException {
 	 super(new FileOutputStream(file));
}
//根据一个File对象指定路径,并指定是否可以追加内容到文本
public FileWriter(File file, boolean append) throws IOException {
        super(new FileOutputStream(file, append));
    }
//制定一个FileDescriptor类作为路径名称
public FileWriter(FileDescriptor fd) {
   	 super(new FileOutputStream(fd));
}

基本方法

write()

write是对目标路径文件进行写入数据操作,它有多个重载的方法

public void write(int c) throws IOException {} //向目标文件写一个字符,参数为int类型,会根据Unicode码转换为字符显示
public void write(char cbuf[]) throws IOException {} //根据字符数组参数写入数据
abstract public void write(char cbuf[], int off, int len) throws IOException; //根据字符数组写入数据,并指定写入的长度区间
public void write(String str) throws IOException {} //根据字符串参数写入数据
public void write(String str, int off, int len) throws IOException { //根据字符参数写入数据,并指定长度区间

示例

public class Write {

	public static void main(String[] args) {
		
		Writer wr = new FileWriter("src//1.txt"); //设置路径在项目src下面的1.txt目录
		wr.write(97); //整数会被转换为对应的Unicode码作字符显示
		
		char[] ch = {'c','h','a','r'}; //创建一个char型数组存放数据
		wr.write(ch); //把数组中的数据写入到文件中
		wr.write(ch,1,2); //写入数组中的数据,并从1-2索引区间开始写
		
		wr.write("Hello,World"); //向文件中写入字符串
		wr.write("String",0,3); //指定0-3索引区间开始写入
		wr.close(); //关闭流,释放关联的所有资源。
	}
}
流的处理

flush和close方法
flush方法用于清空缓冲区。将缓冲区的内容强制输出到文件中, 一般在关闭输出流之前,都先要调用flush方法强制缓冲区中的内容输出并清空缓冲区。

示例

Writer wr = new FileWriter("src//1.txt");
wr.write("this is a write method");
wr.flush(); //刷新到缓冲区
wr.close(); //关闭流

close方法是在流使用完毕后释放流占用的资源,减少内存的损耗。

Writer wr = new FileWriter("src//1.txt");

wr.write("demo close method");
wr.close(); //每次流使用完毕后都要关闭流

Reader类

Reader类是处理Java中对文件读取字符的操作,主要用于对字符的处理,是所有字符输入流中的父类

protected Reader() {} //默认无参构造方法

protected Reader(Object lock) {} //根据Object类设置参数

FileReader

FileReader类和FileWriter类大致相同,都是继承了两个父类,区别在于一个是写数据,一个是读数据。

构造方法
//根据指定字符串作为文件路径或名称
public FileReader(String fileName) throws FileNotFoundException {
   super(new FileInputStream(fileName));
}
//根据一个File对象作为文件的路径或名称
public FileReader(File file) throws FileNotFoundException {
    super(new FileInputStream(file));
}
//根据FileDescriptor类作为路径参数
public FileReader(FileDescriptor fd) {
    super(new FileInputStream(fd));
}

读数据操作

read()方法

//读取单个字符
public int read() throws IOException {}
//根据char数组作为条件读取
public int read(char cbuf[]) throws IOException {}
//根据一个char数组作为参数,并制定读取的长度区间
abstract public int read(char cbuf[], int off, int len) throws IOException;

示例

Reader re = new FileReader("src//1.txt"); //指定项目src目录下的1.txt文本文件
System.out.println((char)re.read()); //读取单个字符并强转为char类型,否则打印的是对应Unicode码表数值
re.close(); //关闭流,释放资源
Reader re = new FileReader("src//1.txt");
char[] ch = new char[1024]; //设置1024个读取容量
System.out.println(re.read(ch)); //放入char数组
re.close(); //关闭流释放资源
Reader re = new FileReader("src//1.txt");
char[] ch = new char[1024];
System.out.println(re.read(ch,0,3)); //设置char数组并根据指定区间进行获取
re.close();

使用循环读取

Reader re = new FileReader("src//1.txt");
int len = 0; //定义初始值
while((len = re.read()) != -1) { //如果读取的内容不等于-1,也就是读完为止
	System.out.print((char)len); //输出内容转换为字符
}
re.close(); //关闭流

文件之间的读写复制

案例:创建两个文本文件分别使用FileReader和FileWriter类做读写操作。

public class text {
	//分别在项目src目录创建一个1.txt和2.txt文本文件
	public static void main(String[] args) throws IOException {
		Reader read = new FileReader("src\\1.txt");
		Writer write = new FileWriter("src\\2.txt");
		
		char[] ch = new char[1024]; //创建一个char数组,设置初始值,可读1024个字符
		int len = 0; //定义初始值
		while((len = read.read(ch)) != -1) { //如果读取数据不等于-1,读完为止
			write.write(ch,0,4); //读取0-4号索引区间的值,根据文本内容的字符长度计算
		}
			read.close(); //关闭输入流
			write.close(); //关闭输出流
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值