当前位置:Gxlcms > 数据库问题 > RandomAccessFile

RandomAccessFile

时间:2021-07-01 10:21:17 帮助过:17人阅读

方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。

getFilePointer

public long getFilePointer()
throws IOException
返回此文件中的当前偏移量。
返回:
到此文件开头的偏移量(以字节为单位),在该位置发生下一个读取或写入操作。
抛出:
IOException - 如果发生 I/O 错误。

seek

public void seek(long pos)
throws IOException
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
参数:
pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
抛出:
IOException - 如果 pos 小于 0 或者发生 I/O 错误。
由于实现了DataInput/DataOutput接口,RandomAccessFile可以 读写JAVA的基本类型
writeUTF

writeUTF

public final void writeUTF(String str)
throws IOException
使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。首先,把两个字节从文件的当前文件指针写入到此文件,类似于使用 writeShort 方法并给定要跟随的字节数。此值是实际写出的字节数,而不是该字符串的长度在该长度之后,按顺序输出该字符串的每个字符,并对每个字符使用 UTF-8 修改版编码
指定者:
接口 DataOutput 中的 writeUTF
参数:
str - 要写入的字符串。
抛出:
IOException - 如果发生 I/O 错误。       

readUTF 

public final String readUTF()
throws IOException从此文件读取一个字符串。该字符串已使用 UTF-8 修改版格式进行编码。 
从当前文件指针开始读取前两个字节,此值给出已编码字符串中随后的字节数,而不是结果字符串的长度。随后的字节然后解释为 UTF-8 修改版格式的字节编码字符,并转换为字符。

在读取了所有字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。

指定者:
接口 DataInput 中的 readUTF
返回:
一个 Unicode 字符串。 
抛出: 
EOFException - 如果在读取所有字节之前此文件已到达末尾。 
IOException - 如果发生 I/O 错误。 
UTFDataFormatException - 如果这些字节不表示 Unicode 字符串的有效 UTF-8 修改版编码。

skipBytes

       public int skipBytes(int n)

throws IOException尝试跳过输入的 n 个字节以丢弃跳过的字节。
此方法可能跳过一些较少数量的字节(可能包括零)。这可能由任意数量的条件引起;在跳过 n 个字节之前已到达文件的末尾只是其中的一种可能。此方法从不抛出 EOFException。返回跳过的实际字节数。如果 n 为负数,则不跳过任何字节。

指定者:
接口 DataInput 中的 skipBytes
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。

 

 

 RandomAccessFile读写基本类型:

  1. package io.randomaccessfile;
  2. import java.io.*;
  3. public class RandomAccessFileDemo
  4. {
  5. public static void main(String[] args) throws Exception
  6. {
  7. RandomAccessFile file = new RandomAccessFile("file", "rw");
  8. // 以下向file文件中写数据
  9. file.writeInt(20);// 占4个字节
  10. file.writeDouble(8.236598);// 占8个字节
  11. <span style="color: #ff0000">file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取</span>
  12. file.writeBoolean(true);// 占1个字节
  13. file.writeShort(395);// 占2个字节
  14. file.writeLong(2325451l);// 占8个字节
  15. file.writeUTF("又是一个UTF字符串");// 首先,把两个字节从文件的当前文件指针写入到此文件,类似于使用 writeShort
  16. // 方法并给定要跟随的字节数。此值是实际写出的字节数,而不是该字符串的长度。在该长度之后,按顺序输出该字符串的每个字符,并对每个字符使用
  17. // UTF-8 修改版编码。
  18. file.writeFloat(35.5f);// 占4个字节
  19. file.writeChar(‘a‘);// 占2个字节
  20. file.seek(0);// 把文件指针位置设置到文件起始处
  21. // 以下从file文件中读数据,要注意文件指针的位置
  22. System.out.println("——————从file文件指定位置读数据——————");
  23. System.out.println(file.readInt());
  24. System.out.println(file.readDouble());
  25. System.out.println(file.readUTF());
  26. file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。
  27. System.out.println(file.readLong());
  28. int strSize = file.readShort();
  29. file.skipBytes(strSize); //
  30. // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。
  31. System.out.println(file.readFloat());
  32. System.out.println(file.readChar());
  33. //---------------复制操作-------------------
  34. System.out.println("——————文件复制(从file到fileCopy)——————");
  35. file.seek(0);
  36. RandomAccessFile fileCopy = new RandomAccessFile("fileCopy", "rw");
  37. int onceReadLen = 1024;
  38. byte []buff = new byte[onceReadLen];
  39. int len=0;
  40. while((len=file.read(buff))!=-1)
  41. {
  42. fileCopy.write(buff, 0, len);
  43. }
  44. file.close();
  45. fileCopy.close();
  46. System.out.println("复制完成!");
  47. }
  48. }<br><br>输出:

——————从file文件指定位置读数据——————
20
8.236598
这是一个UTF字符串
2325451
35.5
a
——————文件复制(从file到fileCopy)——————
复制完成!

  

 

 RandomAccessFile 的一个应用是  多线程下载文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RandomAccessFile

标签:接口   public   system   错误   close   strong   基本类型   应用   exception   

人气教程排行