开始学习字节流类之前,我们来先看下与文件有关的类-File类。File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件,通过调用File类提供的各种方法,我们能够创建、删除文件、重命名文件以及判断文件的读写权限及其是否存在,设置和查询文件的最近修改时间等。在Java中,目录也被当作File使用,只是多了一些目录特有的功能—可以用list方法列出目标中的文件名。
一、File类
(1)功能
File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件。但File类不能访问文件的内容,即不能够从文件中读取数据或向文件里写数据,它只能对文件本身的属性进行操作。
(2)构造方法
>File(String pathname) :创建一个File对象,其内容为字符串路径所对应的文件;
>File(URI uri) :创建一个File对象,其内容为URI所包含的文件;
举例:File f=new File("C:\\test.txt");创建一个File类实例f,该实例的内容直接对应C盘目录下test.txt文件,File类的所有方法则都是针对于该文件。
(3)常用方法
boolean createNewFile():当文件不存在时,,新建一个空的文件(文件名为pathname(包含路径));
boolean delete():删除该抽象路径名所表示的文件或者目录;
boolean exists():判定该抽象路径名所表示的文件或者目录是否存在;
String getAbsolutePath():以字符串的形式返回该文件的绝对路径;
String getCanonicalPath():以字符串的形式返回该文件的相对路径;
String getName():获取该文件/目录的文件(目录)名;
long lastModified():返回该文件最后依次修改时间;
long length() :返回该文件的长度(大小);
boolean setReadable(boolean readable):设置文件的可读权限;
boolean setWritable(boolean writable):设置文件的可写权限;
boolean isDirectory() :判定是否为目录;
boolean isFile():判断是否为文件;
boolean canRead() :判定该文件或目录是否可读;
boolean canWrite() :判定该文件或目录是否可写;
注意:上述方法操作的是由File对象的路径所表示的磁盘文件或目录。
二、RandomAccessFile类
1.功能
RandomAccessFile类是Java语言中最为丰富的文件访问类,其提供了大量的访问文件的方法。RandomAccessFile类支持"随机访问"方式,即使用该类实现跳转到文件的任意位置处读写数据。另外,RandomAccessFile对象类有个位置指示器,指向当前读写处的位置,当读写n个字节后,文件指示器将指向这n个字节后的下一个字节处。需要注意的是,该类仅限于操作文件,不能访问其他的IO设备(如网络、内存映像)。
2.构造方法
RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)
举例:
new RandomAccessFile(f,"rw"); //以读写方式实例化一个RandomAccessFile对象
new RandomAccessFile(f,"r"); //以只读方式实例化一个RandomAccessFile对象
当以读写的方式打开一个文件(引用变量f对应的文件)时,如果该文件不存在,程序将自动创建。
3.常用方法
void close():关闭该随机存取文件流并释放与该文件流有关的系统资源;
long getFilePointer():返回位置指示器指向文件当前读写处的位置;
long length():返回该文件的长度;
int read():从该文件读取一个字节的数据;
int read(byte[] b) :从该文件读取最多b.length()个字节数据到字节数组(byte[]);
int read(byte[] b, int off, int len):从该文件的off位置读取len个字节数据到字节数组(byte[]);
byte readByte():从该文件读取一字节数据;
char readXxx():从该文件读取一个字符/double型/float型数据;
String readLine():读取文件的下一行数据;
void seek(long pos):设置位置指示器偏移位置(相对于文件开头);
int skipBytes(int n):跳过n个字节;
void write(byte[] b) :将指定字节数组中的b.length个字节数据写入到该文件中;
void write(byte[] b, int off, int len) :将从指定字节数组的off位置后面的len个字节数据写入到该文件中
void write(int b) :写一个字节数据到该文件中;
4.源码实战
1.使用RandomAccessFile创建并读取一个文本文件
(1)Employee.java
流过泪的眼睛更明亮,滴过血的心灵更坚强!