第十三讲 Java中的字符流
主要内容 Reader和Writer 文件字符输入流FileReader 文件字符输出流FileWriter 字符流应用举例 标准字符输出流PrintWriter* |
Reader和Writer
Reader
抽象类,规定了字符输入流的最基本操作——读操作。
read方法
public int read() throws IOException |
从流中读一个字符,当流中没有数据可读时,返回值为-1 |
public int read(char[] c) throws IOException |
根据数组尺寸从流中读字符,置于数组中。返回读取字符个数。 |
public int read(char[] c,int off,int len) throws IOException |
读入len个字符,从下标off开始置入数组cbuf |
其他方法
skip方法:从流中跳过字符。
public long skip(long n) throws IOException
close方法:关闭流。
public abstract void close() throws IOException
思考 1. Reader子类对象,表示的是怎样的一种数据流? 2. 对于Reader数据流,如何从中读取数据? 3. 一次性可读取一组数据吗? 4. 在数据流操作时,将会抛出什么异常? 5. 如何创建一个Reader子类对象? |
Writer
抽象类,规定了字符输出流的最基本操作——写操作。
写方法
public void write(int b) throws IOException |
向流中写一个字符数据 |
public void write(char[] cbuf) throws IOException |
向流中写字符数组cbuf |
public void write(String s) throws IOException |
向流中写一个字符串(很实用) |
flush方法
public abstract void flush() throws IOException
将缓冲区中数据立即写入到输出流。
close方法
public abstract void close() throws IOException
思考 1. Writer子类对象,表示的是怎样的一种数据流? 2. 对于Writer数据流,如何向它写入数据? 3. 可以写入什么样的数据? 4. 如何关闭Reader数据流和Writer数据流? 5. 关闭意味着什么? 6. 如何创建一个Writer子类对象? |
文件字符输入流FileReader
按字符对文件进行数据读入操作。更适合于对文本文件的操作。
文件字符输入流的创建
public FileReader(String filename)
throws FileNotFoundException |
public FileReader(File file)
应用举例
例1:显示一个指定文本文件的内容(如:d:\javawork\try.txt)
import java.io.*;
class ReadFile{
public static void main(String[] a) throws Exception{
File f1=new File("d:\\javawork\\try.txt");
FileReader fr=new FileReader(f1);
int b;
while((b=fr.read())!=-1){
System.out.print((char)b);
}
System.out.println();
fr.close();
}
}
思考 1. 如果创建一个指向文件的字符输入流? 2. 文件字符输入流有何用? 3. 上例中,如果文件不存在,哪条语句将引发异常? 4. 试总结,从字符输入流中读取所有文本的方法? 5. 修改程序:文件内容显示时,一行空一行。 6. 修改程序:进行显示过滤,只显示文件中的英文字母。 |
文件字符输出流FileWriter
按字符对文件进行数据写入操作。
文件字符输出流的创建
FileWriter(File file)
FileWriter(File file, boolean append)
FileWriter(String fileName)
FileWriter(String fileName, boolean append)
throws IOException |
应用举例
例2:创建文件“d:\javawork\try.txt”,并向文件中写入两行。
import java.io.*;
class CreateFile{
public static void main(String[] aa) throws Exception{
FileWriter out=new FileWriter("d:\\javawork\\try.txt");
out.write("It's try.\r\n");
out.write("试一试!");
out.close();
}
}
练习1:文件内容追加若干行。(ModiText.java)
练习2:文本文件复制。(CopyText.java,生成文本文件newtry.txt)
字符流应用举例
1、设计Copy类,在其中设计一个静态的sendChar方法,从一个Reader流向另一个Writer流进行数据传输。
2、设计一个Test1类,利用Copy类中的sendChar方法方法,将文件try.txt的内容向控制台输出显示。
提示:new PrintWriter(System.out)----向标准输出设备的字符输出流。
3、设计一个Test2类,利用Copy类中的sendChar方法方法,将文件star.txt复制生成另一个文本文件sstar.txt。
PrintWriter
向标准输出设备的输出流,可直接用来输出各种类型的数据。
构造方法
public PrintWriter(OutputStream out)
从一个存在的字节输出流创建一标准字符输出流。
public PrintWriter(Writer out)
从一个存在的字符输出流创建一标准字符输出流。(可加第二个boolean型参数,以设置是否自动强制输出)
说明:PrintWriter须从别的OutputSteam流或者Writer流而创建。不能直接来自文件等节点。
如:
……=new PrintStream("d:\\try.txt");----错!!!
……=new PrintStream(new FileWriter("d:\\try.txt"));----对!
……=new PrintStream(new FileInputStream("d:\\try.txt"));----对!