[Java] RandomAccessFile基本使用 →→→→→进入此内容的聊天室

来自 , 2021-03-06, 写在 Java, 查看 141 次.
URL http://www.code666.cn/view/39e4973b
  1. package fengke.filedemo;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.RandomAccessFile;
  6.  
  7. /**
  8.  * RandomAccessFile
  9.  *
  10.  * @author 锋客
  11.  *  内容:
  12.  *  1.RandomAccessFile不会创建文件,需要和File配合使用
  13.  *  2.可以实现文件的复制
  14.  *  3.乱码问题的解决:
  15.  */
  16. public class RandomAccessFileSeriaDemo {
  17.  
  18.         public static void main(String[] args) throws IOException {
  19.                 // TODO Auto-generated method stub
  20.                 File demo = new File("demo1");
  21.                 if (!demo.exists())
  22.                         demo.mkdir();
  23.                 File file1 = new File(demo, "raf.dat");
  24.                 if (!file1.exists())
  25.                         file1.createNewFile();
  26.  
  27.                 // 打开文件,进行随机读写
  28.                 RandomAccessFile rf = new RandomAccessFile(file1, "rw");
  29.                 for (int i = 0; i < 10; i++) {
  30.                         // 写入基本类型double数据
  31.                         rf.writeDouble(i * 1.414);
  32.                 }
  33.                 rf.close();
  34.  
  35.                 rf = new RandomAccessFile("rtest.dat", "rw");
  36.                 // 直接将文件指针移到第5个double数据后面
  37.                 rf.seek(5 * 8);
  38.                 // 覆盖第6个double数据 ======》i<6
  39.                 rf.writeDouble(47.0001);
  40.                 rf.close();
  41.  
  42.                 rf = new RandomAccessFile("rtest.dat", "r");
  43.                 // 读取数据
  44.                 for (int i = 0; i < 6; i++) {
  45.                         System.out.println("Value " + i + ": " + rf.readDouble());
  46.                 }
  47.  
  48.                 RandomAccessFile file = new RandomAccessFile("file", "rw");
  49.                 // 以下向file文件中写数据
  50.                 file.writeInt(20);// 占4个字节
  51.                 file.writeDouble(8.236598);// 占8个字节
  52.                 file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取
  53.                 file.writeBoolean(true);// 占1个字节
  54.                 file.writeShort(395);// 占2个字节
  55.                 file.writeLong(2325451l);// 占8个字节
  56.                 file.writeUTF("又是一个UTF字符串");
  57.                 file.writeFloat(35.5f);// 占4个字节
  58.                 file.writeChar('a');// 占2个字节
  59.  
  60.                 file.seek(0);// 把文件指针位置设置到文件起始处
  61.  
  62.                 // 以下从file文件中读数据,要注意文件指针的位置
  63.                 System.out.println("——————从file文件指定位置读数据——————");
  64.                 System.out.println(file.readInt());
  65.                 System.out.println(file.readDouble());
  66.                 System.out.println(file.readUTF());
  67.  
  68.                 file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。
  69.                 System.out.println(file.readLong());
  70.  
  71.                 file.skipBytes(file.readShort()); // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。
  72.                 System.out.println(file.readFloat());
  73.  
  74.                 // 以下演示文件复制操作
  75.                 System.out.println("——————文件复制(从file到fileCopy)——————");
  76.                 // 先得有接收文件,才能查看到实际结果
  77.                 File file_copy = new File("e:\\fileCopy.txt");
  78.                 file_copy.createNewFile();
  79.                 file.seek(0);
  80.                 RandomAccessFile fileCopy = new RandomAccessFile("e:\\fileCopy.txt", "rw");
  81.                 int len = (int) file.length();// 取得文件长度(字节数)
  82.                 byte[] b = new byte[len];
  83.                 file.readFully(b);
  84.                 fileCopy.write(b);
  85.                 System.out.println("文件路径:" + file_copy.getAbsolutePath());
  86.                 System.out.println("复制完成!");
  87.                
  88.                 fileCopy.seek(0);// 这句话很重要,是查询的基础
  89.                
  90.                 // 查看复制是否完成,必須有fileCopy.seek(0);
  91.                  System.out.println(fileCopy.readInt());
  92.                  System.out.println(fileCopy.readDouble());
  93.                  System.out.println(fileCopy.readUTF());
  94.                 fileCopy.close();
  95.                 file.close();
  96.  
  97.         }
  98.  
  99. }
  100.  

回复 "RandomAccessFile基本使用"

这儿你可以回复上面这条便签

captcha