java中字符流的总结

在程序中一个字符等于两个字节,那么Java提供了Reader和Writer两个专门操作字符流的类

1.字符输出流Writer

Writer本身是一个字符流的输出类,此类的定义如下:

public abstract class Writer extends Object implements Appendable,Closeable,Flushable

范例:向文件中写入数据

<span style="font-size:18px;">import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo01 {
	public static void main(String[] args) throws Exception{
		//1.使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt");
		//2.通过子类实例化父类对象
		Writer out = null;
		out = new FileWriter(f);
		//3.进行写操作
		String str = "Hello Tomcmd!";
		out.write(str);
		//4.关闭输出流
		out.close();
	}
}
</span>
使用FileWriter追加文件的内容

public FileWriter(File file,boolean append) throws IOException{}

<span style="font-size:18px;">import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo02 {
	public static void main(String[] args) throws Exception{
		//1.使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt");
		//2.通过子类实例化父类对象
		Writer out = null;
		out = new FileWriter(f,true);
		//3.进行写操作
		String str = "\r\nCHENMD";
		out.write(str);
		//4.关闭输出流
		out.close();
	}
}
</span>
2.字符输入流

Reader是使用字符的方式从文件中取出数据

public abstract class Reader extends Object implements Readable,Closeable

<span style="font-size:18px;">import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class ReaderDemo01 {
	public static void main(String[] args) throws Exception{
		//1.使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt");
		//2.通过子类实例化父类对象
		Reader reader = null;
		reader = new FileReader(f);
		//3.进行读操作
		char[] c = new char[1024];
		int len = reader.read(c);
		//4.关闭输入流
		reader.close();
		System.out.println("内容为:"+new String(c,0,len));
	}
}
</span>
循环读取:

<span style="font-size:18px;">import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;


public class ReaderDemo02 {
	public static void main(String[] args) throws Exception{
		//1.使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt");
		//2.通过子类实例化父类对象
		Reader reader = null;
		reader = new FileReader(f);
		//3.进行读操作
		int len = 0;	//记录读取的数据个数
		char[] c = new char[1024];	//所有的内容读到此数组中
		int temp = 0 ;	//接收读到的每一个内容
		while((temp = reader.read()) != -1){
			c[len] = (char)temp;
			len++;
		}
		//4.关闭输入流
		reader.close();
		System.out.println("内容为:"+new String(c,0,len));
	}
}
</span>
3.字节流与字符流的区别

字节流在操作时本身不会用到缓冲区,是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,下面看两种区别:

<span style="font-size:18px;">import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class OutputStreamDemo{
	public static void main(String[] args) throws Exception{
		File f = new File("d:" + File.separator + "test.txt");
		OutputStream out = null;
		out = new FileOutputStream(f);
		String str = "Hello World!!!";
		byte[] b = str.getBytes();
		out.write(b);
	}
}
</span>
输出结果:

文件内容变为:Hello World!!!

此时没有关闭字节流操作,但是文件中依然存在了输出的内容,证明字节流是操作文件本身的,下面是用字符流完成,观察效果:

<span style="font-size:18px;">import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo03 {
	public static void main(String[] args) throws Exception{
		//1.使用File类找到一个文件
		File f = new File("d:" + File.separator + "test.txt");
		//2.通过子类实例化父类对象
		Writer out = null;
		out = new FileWriter(f,true);
		//3.进行写操作
		String str = "\r\nCHENMD";
		out.write(str);
		//4.关闭输出流
		//out.close();
	}
}
</span>
程序运行结果:

文件内容为:Hello World!!!

也就是说追加的内容并没有加进去,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区的内容是无法输出的

所以:字符流使用了缓冲区,而字节流没有使用缓冲区
如果想在不关闭时也将字符流的内容全部输出,可以使用Writer类中的flush()方法完成

4.使用字节流好还是字符流好

字符流,显然是专用来写入字符的字节流,可以写文本文本文件也可以写其他文件如电影文件 ,在开发中,字节流使用较为广泛



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值