java读取文件-字符流读取方式

时间:2021-07-23 21:01:58

java采用16位的Unicode来表示字符串和字符,对应的数据流就称为字符流。Reader和Writer为字符流设计。FileReader是InputStreamReader的子类,而InputStreamReader是Reader的子类;FileWriter是OutputStreamWriter的子类,而OutputStreamWriter则是Writer的子类。字符流和字节流的区别在于,字符流操作的对象是字符及字符数组,而字节流操作的对象则是字节及字节数组。

字符输入流

FileReader的常用构造包括以下几种。

  FileReader(String fileName):根据文件名创建FileReader对象。

  FileReader(File file):根据File对象创建FileReader对象。

FileReader的常用方法包括以下几种。

int read():读取单个字符。返回字符的整数值,如果已经到达文件尾,则返回-1.

int read(char[] cbuf):将字符读入cbuf字符数组。返回读取到的字符数,如果已经到达文件尾,则返回-1.

int read(char[] cbuf,int off,int len):将读取到的字符存放到cbuf字符数组从off标识的偏移位置开始处,最多读取len个字符。

    与字节流不同,BufferReader是Reader的直接子类,这一点和BufferInputStream是InputStream的二级子类有所不同。通过BufferReader.readLine()方法可以实现读取文本行、返回字符串,因为我们平时读取的文本文件大多是断行的,而且该方法能直接返回字符串,因此BufferReader使用得比FileReader更为广泛。

   BufferReader用有以下两种构造方法。

    BufferReader(Reader in):根据in代表的Reader对象创建BufferReader实例,缓冲区大小采用默认值。

    BufferReader(Reader in,int sz):根据in代表的Reader对象创建BufferReader实例,缓冲区大小采用指定sz值。

BufferReader.readLine()方法遇到以下字符或者字符串认为当前行结束:‘\n’(换行符),'\r'(回车符),'\r\n'(回车换行)。返回值为该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null。

BufferReader in=new BufferReader(new FileReader("C:/1.txt"));
String line=null;
while((line=in.readLine())!=null)
{
System.out.println(line);
}
in.close();

正如同BufferInputStream不仅可以用来读取文件一样,BufferReader也可以读取任意类型的字符输入流。

LineNumberReader是BufferReader的子类。在BufferReader以行方式读取字符流的基础上,LineNumberReader能通过getLineNumber()方法获取当前行号。行号默认是从1开始计数的,但是可以通过setLineNumber()方法随意设置行号,注意这种设置只对后续的getLineNumber()方法返回值生效,对文件内容没有任何影响。

字符输出流

FileWriter的常用构造有以下几种。

    FileWriter(String fileName):根据文件名创建FileWriter对象。

    FileWriter(String fileName,boolean append):根据文件名创建FileWriter对象,append参数用来指定是否在原文件之后追加内容。

   FileWriter(File file):根据File对象创建FileWriter对象。

   FileWriter(File file,boolean append):根据File对象创建FileWriter对象,append参数用来指定是否在原文件之后追加内容。

FileWriter的常用方法包括以下几种。

   void writer(int c):向文件中写入正整数c代表的单个字符。

   void writer(char[] cbuf):向文件中写入字符数组cbuf。

   void writer(char[] cbuf,int off, in len):向文件中写入字符数组cbuf从偏移位置off开始的len个字符。

   void writer(String str):向文件中写入字符串str,注意此方法不会在写入完毕之后自动换行。

   void writer(String str,int off,int len):向文件中写入字符串str的从位置off开始、长度为len的一部分子串。

   Writer append(char c):向文件中追加单个字符c。

   Writer append(CharSequence csq):向文件中追加csq代表的一个字符序列。CharSequence是从JDK1.4版本开始引入的一个接口,代表字符值的一个可读序列,此接口对许多不同种类的字符序列提供统一的只读访问。

   Writer append(CharSequence csq,int start,int end):向文件中追加csq字符序列的从位置start开始、end结束的一部分字符。

   void flush():刷新字符输出流缓冲区。

   void close():关闭字符输出流。

    和BufferReader相对应,启用缓冲区的BufferWriter也拥有一下两种形式的构造方法。

    BufferWriter(Writer out): 根据out代表的Writer对象创建BufferWriter实例,缓冲区大小采用默认值。

    BufferWriter(Writer out,int sz):根据out代表的Writer对象创建BufferWriter实例,缓冲区大小采用指定的sz值。

    我们知道,BufferReader类的readLine()方法能一次从输入流中读入一行,但对于BufferWriter类,却没有一次写一行的方法。若要向输出流中一次写一行,可用PrintWriter类(PrintWriter也是Writer的直接子类)将原来的流改造成新的打印流,PrintWriter类有一个方法println(String),能一次输出一行,即在待输出的字符串后自动补“\r\n”.