Java IO流(三)-- 文件的处理与随机访问

来源:互联网 发布:淘宝违规申诉入口 编辑:程序博客网 时间:2024/06/06 03:40

计算机程序运行时,数据都是保存在系统的内存中,由于关机时内存中的数据全部丢失,所以必须把那些需要长期保存的数据存放在磁盘文件中,需要时再从文件中读取。

文件的处理

文件夹是管理文件的特殊机制,同类文件保存在一个同一个文件夹下不仅可以简化文件管理,而且可以提高工作效率。Java语言不仅支持文件管理,还支持文件夹管理。在java.io包中定义一个File类,专门用来管理磁盘文件和文件夹,而不负责数据的输入输出。

File类的构造方法:

File(File parent, String child) //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。File(String pathname) //通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 File(String parent, String child) //根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。File(URI uri) //通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 

注意:

(1)pathname参数可以是绝对路径,如“d:\java\test.java”,也可以是相对路径,如“java\test.java”,pathname参数还可以是磁盘上的某个文件夹。

(2)由于不同的操作系统使用的文件夹分隔符不同,如Windows用反斜线“\”,Unix用正斜线“/”。为了使Java程序能够在不同的平台运行,可以用File类的一个静态变量File.separator,该属性中保存了当前系统规定的文件夹分隔符。

File类的常用方法:

boolean canRead() //测试应用程序是否可以读取此抽象路径名表示的文件。 boolean canWrite() //测试应用程序是否可以修改此抽象路径名表示的文件。 int compareTo(File pathname) //按字母顺序比较两个抽象路径名。boolean delete() //删除此抽象路径名表示的文件或目录。 boolean equals(File file) //比较两个文件或文件夹是否是同一文件,而不是比较内容相同boolean exists() //测试此抽象路径名表示的文件或目录是否存在。 String getName() //返回由此抽象路径名表示的文件或目录的名称。 String getParent() //返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。String getPath() //将此抽象路径名转换为一个路径名字符串。 boolean isAbsolute() //测试此抽象路径名是否为绝对路径名。 boolean isDirectory() //测试此抽象路径名表示的文件是否是一个目录。 boolean isFile() //测试此抽象路径名表示的文件是否是一个标准文件。 long lastModified() //返回此抽象路径名表示的文件最后一次被修改的时间。 long length() //返回由此抽象路径名表示的文件的长度。 String[] list() //返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 boolean mkdir() //创建此抽象路径名指定的目录。 boolean renameTo(File dest) //重新命名此抽象路径名表示的文件。 URI toURI() //构造一个表示此抽象路径名的 file: URI。 boolean createNewFile()  //创建一个新的空文件。

对文件的随机访问

前面介绍的流类实现的是对磁盘文件的顺序读写,而且读和写要分别创建不同的对象。Java语言还定义了一个功能更强大、使用更方便的随机访问文件类RandomAccessFile,它可以实现对文件的随机读写。

RandomAccessFile的构造方法:

RandomAccessFile(File file, String mode)  //创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 RandomAccessFile(String name, String mode) //创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 

说明:访问模式mode表示所创建的随机读写文件的操作状态,mode的取值:
r–表示以只读方式打开文件
rw–表示以读写方式打开文件,使用该模式只用一个对象就可以同时实现读和写两种操作

RandomAccessFile常用读取方法:

void close() //关闭此随机访问文件流并释放与该流关联的所有系统资源。 FileDescriptor getFD() //返回与此流关联的不透明文件描述符对象。 long getFilePointer() //返回此文件中的当前偏移量。 long length() //返回此文件的长度。 int read() //从此文件中读取一个数据字节。 int read(byte[] b) //将最多 b.length 个数据字节从此文件读入 byte 数组。int read(byte[] b, int off, int len) //将最多 len 个数据字节从此文件读入 byte 数组。 boolean readBoolean() //从此文件读取一个 boolean。 byte readByte() //从此文件读取一个有符号的八位值。char readChar() //从此文件读取一个字符。 double readDouble() ///从此文件读取一个 double。float readFloat() //从此文件读取一个 float。 void readFully(byte[] b) //将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。 void readFully(byte[] b, int off, int len) //将正好 len 个字节从此文件读入 byte 数组,并从当前文件指针开始。int readInt() //从此文件读取一个有符号的 32 位整数。 String readLine() //从此文件读取文本的下一行。 long readLong() //从此文件读取一个有符号的 64 位整数。 short readShort() //从此文件读取一个有符号的 16 位数。 String readUTF() //从此文件读取一个字符串。 void seek(long pos) //设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。 void setLength(long newLength) //设置此文件的长度。int skipBytes(int n) //尝试跳过输入的 n 个字节以丢弃跳过的字节。 

RandomAccessFile常用写入方法:

void write(byte[] b) //将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。 void write(byte[] b, int off, int len) //将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。 void write(int b) //向此文件写入指定的字节。 void writeBoolean(boolean v) //按单字节值将 boolean 写入该文件。void writeByte(int v) //按单字节值将 byte 写入该文件。void writeBytes(String s) //按字节序列将该字符串写入该文件。 void writeChar(int v) //按双字节值将 char 写入该文件,先写高字节。 void writeChars(String s) //按字符序列将一个字符串写入该文件。 void writeDouble(double v) //使用 Double 类中的 doubleToLongBits 方法将双精度参数转换为一个 long,然后按八字节数量将该 long 值写入该文件,先定高字节。void writeFloat(float v) //使用 Float 类中的 floatToIntBits 方法将浮点参数转换为一个 int,然后按四字节数量将该 int 值写入该文件,先写高字节。 void writeInt(int v) //按四个字节将 int 写入该文件,先写高字节。 void writeLong(long v) //按八个字节将 long 写入该文件,先写高字节。 void writeShort(int v) //按两个字节将 short 写入该文件,先写高字节。 void writeUTF(String str) //使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。 
原创粉丝点击