RandomAccessFile类
RandomAccessFile
类创建的流称作随机流,与前面的输入输出流不同的是,RandomAccessFile
类既不是InputStream
类的子类,也不是OutputStream
类的子类。但是RandomAccessFile
类创建的流的指向既可以作为流的源,也可以作为流的目的地,换句话说,当准备对一个文件进行读写操作时,可以创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。并且通过该类可以访问文件任意位置的信息。
构造函数
/**
* 参数name用来确定一个文件名,给出创建的流的源,也是流的目的地;
* 参数mode取r(只读)或rw(可读写)等访问权限,决定创建的流对文件的访问权力;
*/
public RandomAccessFile(String name, String mode);
/**
* 参数file是一个File对象,给出创建的流的源,也是流的目的地;
* 参数mode取r(只读)或rw(可读写)等访问权限,决定创建的流对文件的访问权力;
*/
public RandomAccessFile(File file, String mode);
- 这里对第二个参数mode(模式)作详细说明 :表示了以何种方式打开文件,共有4种模式:
"r"
,"rw"
,"rws"
和"rwd"
。"r"
:以只读方式打开。调用结果对象的任何write
方法都将导致抛出IOException
。"rw"
:打开以便读取和写入。"rws"
:打开以便读取和写入。相对于"rw"
,"rws"
还要求对“文件的内容”或“元数据”的每个更新都同步写入到基础存储设备。"rwd"
:打开以便读取和写入,相对于"rw"
,"rwd"
还要求对“文件的内容”的每个更新都同步写入到基础存储设备。
什么是“元数据”,即metadata?
英文解释如下:
The definition of metadata is “data about other data.” With a file system, the data is contained in its files and directories, and the metadata tracks information about each of these objects: Is it a regular file, a directory, or a link? What is its size, creation date, last modified date, file owner, group owner, and access permissions?
大致意思是:
metadata是“关于数据的数据”。在文件系统中,数据被包含在文件和文件夹中;metadata信息包括:“数据是一个文件,一个目录还是一个链接”,“数据的创建时间(简称ctime)”,“最后一次修改时间(简称mtime)”,“数据拥有者”,“数据拥有群组”,“访问权限”等等。
"rw", “rws”, “rwd” 的区别
- 当操作的文件是存储在本地的基础存储设备上时(如硬盘,NandFlash等),
"rws"
或"rwd"
,"rw"
才有区别。 - 当模式是
"rws"
并且 操作的是基础存储设备上的文件;那么,每次“更改文件内容(如write()写入数据)” 或 “修改文件元数据(如文件的mtime)”时,都会将这些改变同步到基础存储设备上。 - 当模式是
"rwd"
并且 操作的是基础存储设备