Java中的输入与输出流详解(二)
3、字符流
我们已经介绍了字节流类并详细地讲解了字节流。虽然字节流的功能十分强大,它能直接或间接地处理任何数据类型的输入和输出操作,但是它却不能直接操作16位的Unicode字符。这时提供直接的字符输入和输出就显得非常有必要了。
1)、如何读取Unicode字符
Reader和Writer类处在字符流类的顶层,是所有字符流类的基类。同时它们都是抽象的,它们仅提供了基本的函数类型,没有具体实现,所以不能直接生成对象。要通过其子类来生成所需的对象,同时必须重写Reader和Writer类中的方法。下面是它们的主要方法:
Reader方法:
>read():从输入流中读取下一个字符,并以int类型返回。如遇输入流的末尾则返回-1
>read(char[] buffer):读取长度为buffer.length的字符到buffer中,返回本次读取的字符数;
>read(char[] buffer , int off , intlen):同上,写入buffer中从下标off开始的位置,并返回本次读取的字符数。
>close():关闭当前的输入流;
>skip(long n):跳过n个字符,返回实际跳过的字符数;
>mark(int readlimit):在输入流的当前位置设置标记,该标记在从流中读取readlimit个字符前都保持有效;
>markSupported():测试调用的流是否支持mark()/reset();
>ready():测试输入流是否准备好读取字符;
>reset():重置输入指针到先钱设定的标记处。
Writer方法:
>write(int c):将指定的字符c作为数据写入输出流,下面是对其的重写:
>write(char[]buffer):将buffer中长度为buffer.length个字符的数据写入输出流;
>write(char[] buffer , int off , intlen):同上,将buffer中从下标off开始的长度为len个字符的数据写入输出流;
>write(String str):将字符串str写入输出流;
>write(String str , intoff , int len):将字符串中以off为起点的len个字符写入输出流;
>close():关闭当前的输出流,同时释放相关的系统资源;
>flush():刷新输出流。
上述方法在调用时如果出现错误,将会跑出一个IOException异常。
2)、读取字符文件
FileReader和FileWriter类分别继承了Reader和Writer类,它们重写了父类中的所有方法,主要用于字符文件的读写操作。FileReader类用于读取字符文件的内容,每次赌气一个字符或一个字符数组。FileWriter类用于写入字符文件的内容,每次写入一个字符或一个字符串。
FileReader类的两个常用的构造函数如下:
> FileReader(StringfilePath)//filePath指被打开并被读取数据的文件的全路径
>FileReader(FilefileObj)//fileObj指被打开并被读取数据的文件
下面的实例讲解了FileReader的使用方法:
public static voidmain(String args[]) { File f1=new File("F:\\java基础\\wndang\\程序\\5\\5-2");//打开一个文件 File f2=new File(f1,"User.java"); File f3=new File("F:\\java基础\\wndang\\程序\\5\\5-2\\User.java"); System.out.println(f2); System.out.println(); //获取该文件的各个属性和信息 System.out.println("exists: "+f2.exists()); System.out.println("isfile: "+f2.isFile()); System.out.println("Directory: "+f2.isDirectory()); System.out.println("Read: "+f2.canRead()); System.out.println("Write: "+f2.canWrite()); System.out.println("Hidden: "+f2.isHidden()); System.out.println("ReadOnly: "+f2.setReadOnly()); System.out.println("Name: "+f2.getName()); System.out.println("Parent: "+f2.getParent()); System.out.println("AbsolutePath: "+f2.getAbsoluteFile()); System.out.println("lastModified: "+f2.lastModified()); System.out.println("length: "+f2.length()); System.out.println("list "+f2.list()); System.out.println("mkdir "+f2.mkdir()); File f4=new File("Student.java"); System.out.println("newname"+f2); f2.renameTo(f4); System.out.println("Name: "+f4.getName()); System.out.println(f2+"exist "+f2.exists()); System.out.println(f4+"exist "+f2.exists()); System.out.println("delete"+f4); System.out.println("equals "+f2.equals(f4)); f4.delete(); System.out.println(f4+"exist "+f4.exists()); System.out.println("String "+f2.toString()); }