java中字符流的总结

来源:互联网 发布:交换机端口镜像命令 编辑:程序博客网 时间:2024/05/22 05:08

在程序中一个字符等于两个字节,那么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.使用字节流好还是字符流好

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



0 0
原创粉丝点击