Java IO流(二)--字符流

xiaoxiao2021-02-28  122

InputStream和OutputStream类通常是用来处理“字节流”即“位流”的,也就是二进制文件,而Reader和Writer类则是用来处理“字符流”的,也就是文本文件。

Reader和Writer流类

Reader和Writer都是抽象类,定义的方法都是给所派生的子类使用

Reader类方法:

abstract void close() //关闭该流并释放与之关联的所有资源。 void mark(int readAheadLimit) //标记流中的当前位置。 boolean markSupported() //判断此流是否支持 mark() 操作。 int read() //读取单个字符。 int read(char[] cbuf) //将字符读入数组。 abstract int read(char[] cbuf, int off, int len) //将字符读入数组的某一部分。 int read(CharBuffer target) //试图将字符读入指定的字符缓冲区。 boolean ready() //判断是否准备读取此流。 void reset() //重置该流。 long skip(long n) //跳过字符。

Writer类的方法:

Writer append(char c) //将指定字符添加到此 writer。 Writer append(CharSequence csq) //将指定字符序列添加到此 writer。 Writer append(CharSequence csq, int start, int end) //将指定字符序列的子序列添加到此 writer.Appendable。 abstract void close() //关闭此流,但要先刷新它。 abstract void flush() //刷新该流的缓冲。 void write(char[] cbuf) //写入字符数组。 abstract void write(char[] cbuf, int off, int len) //写入字符数组的某一部分。 void write(int c) //写入单个字符。 void write(String str) //写入字符串。 void write(String str, int off, int len) //写入字符串的某一部分。

注意:Java把每个汉字和英文字母均作为一个字符对待,但回车换行符“\r\n”作为两个字符。

使用FileReader类读取文件

文件字符输入流类FileReader是继承自InputStreamReader类,而InputStreamReader类又继承自Reader类。

FileReader构造方法:

FileReader(File file) //在给定从中读取数据的 File 的情况下创建一个新 FileReader。 FileReader(FileDescriptor fd) //在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 FileReader(String fileName) //在给定从中读取数据的文件名的情况下创建一个新 FileReader。

例1:

public static void main(String[] args) throws IOException{ char[] c=new char[500]; FileReader fr=new FileReader("f:\\test.txt");//创建字符输入流对象 int num=fr.read(c);//把数据读入字符数组c中,并返回读取的字符数 String str=new String(c,0,num); System.out.println("文件大小(字符):"+num); System.out.println("内容:"); System.out.println(str); fr.close(); }

使用FileWriter类写入文件

文件字符输出流类FileWriter继承自OutputStreamWriter类,而OutputStreamWriter类又继承自Writer。

FileWriter构造方法:

FileWriter(File file) //根据给定的 File 对象构造一个 FileWriter 对象。 FileWriter(File file, boolean append) //根据给定的 File 对象构造一个 FileWriter 对象。 FileWriter(FileDescriptor fd) //构造与某个文件描述符相关联的 FileWriter 对象。 FileWriter(String fileName) //根据给定的文件名构造一个 FileWriter 对象。 FileWriter(String fileName, boolean append) //根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

例2:

public static void main(String[] args) throws IOException{ FileWriter fw=new FileWriter("f:\\test.txt"); char[] c={'a','b','c','\r','\n'}; String str="java语言"; fw.write(c); fw.write(str); fw.close(); }

使用BufferedReader类读取文件

缓冲字符输入流类BufferedReader继承自Reader类,用来读取缓冲区中的数据。使用该类之前,必须先创建FileReader类的对象。

BufferedReader构造方法:

BufferedReader(Reader in) //创建一个使用默认大小输入缓冲区的缓冲字符输入流。 BufferedReader(Reader in, int sz) //创建一个使用指定大小输入缓冲区的缓冲字符输入流。

BufferedReader方法:

String readLine() //读取一个文本行。无时返回null

使用BufferedWriter

缓冲字符输出流类BufferedWriter继承自Writer类,用来将数据写入缓冲区中,调用之前要创建FileWriter类对象。缓冲区内的数据最后必须要用flush()方法将缓冲区清空,也就是将缓冲区的数据全部写到文件内。

BufferedWriter的构造方法:

BufferedWriter(Writer out) //创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int sz) //创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

BufferedWriter的方法:

void newLine() //写入一个行分隔符。

例3:

public static void main(String[] args) throws IOException{ String str; BufferedReader in =new BufferedReader(new FileReader("f:\\test.txt")); BufferedWriter out =new BufferedWriter(new FileWriter("f:\\test2.txt")); while((str=in.readLine())!=null){ System.out.println(str);//在控制台输出 out.write(str);//将读取的一行数据写入缓冲区 out.newLine();//写入换行符 } out.flush();//将缓冲区的数据写入文件中 in.close(); out.close(); }
转载请注明原文地址: https://www.6miu.com/read-43778.html

最新回复(0)