zoukankan      html  css  js  c++  java
  • Java的RandomAccessFile对文件内容进行读写

     RandomAccessFileJava提供的对文件内容的访问,她既可以读文件,也可以写文件,并且RandomAccessFile支持随机访问文件,也就是说他可以指定位置进行访问。

      我们知道Java的文件模型,文件硬盘上的文件是byte byte byte的字节进行存储的,是数据的集合。下面就是用这个类的步骤。

    (1)打开指定的文件,有两种模式rw(读写r(只读),创建对象,并且指定file和模式,例如:

          RandomAccessFile ac=new RandomAccessFile(file,”rw”);

     因为它支持随机访问文件,所以他引入了指针,可以通过指针来写入写出在指定的位置。文件指针,打开文件时指针在开头pointer=0

    (2)RandomAccessFile的往文件中写的方法(还有其他的写方法)

      Ac.write(int)----->只能写一个字节(后八位),同时文件指针也会移动,指向下一个位置。

    (3)RandomAccessFile读的方法(还有其他的读方法)

      int b=ac.read()--->读一个字节

    (4)文件读写完毕后必须要把他关闭,调用close()的方法。下面就是例子:

    //创建相对路径的文件,就是在这个项目中创建一个文件夹
            File file=new File("random");
            if(!file.exists()) {
                file.mkdir();
            }
            File fileName=new File(file,"javaio.txt");
            if(!fileName.exists()) {
                fileName.createNewFile();//创建文件
            }
            //创建一个RandomAccessFile的对象,并指定模式rw,能读能写,
            //注意:必须是文件,不能是路径
            RandomAccessFile raf=new RandomAccessFile(fileName,"rw");
            //获取此时的文件指针的位置,起始位置为0
            System.out.println(raf.getFilePointer());
            //向文件中写入字符A,字符类型有两个字节,但她写入的是后八位的字节
            //字符A正好可以用后八位的字节表示出来
            raf.write('A');
            //字符的位置会自动向后移动,文件指针会向后自动移动
            System.out.println("输入一个字符之后,文件指针的位置"+raf.getFilePointer());
            raf.write('B');
            
            
            //每次write只能写入一个字节,如果要把i写进去,就需要写四次
            int i=0x7fffffff;
            raf.write(i>>>24 & 0xff);//写入高八位的
            raf.write(i>>>16 & 0xff);
            raf.write(i>>>8   & 0xff);
            raf.write(i);//写入低八位
            System.out.println("写入整数的时候文件指针的位置是"+raf.getFilePointer());
            
            
            /**
             * writeInt()的内置方法
             *  public final void writeInt(int v) throws IOException {
            write((v >>> 24) & 0xFF);
            write((v >>> 16) & 0xFF);
            write((v >>>  8) & 0xFF);
            write((v >>>  0) & 0xFF);
            //written += 4;
        }
             */
            
            //也可以直接写入int整数
            raf.writeInt(i);
            
            //写入一个汉字,汉字为两个字节
            String str="欢迎学习java";
            byte[] b=str.getBytes("gbk");
            raf.write(b);
            System.out.println("此时的长度为"+raf.length());
            
            
            //读文件必须将文件指针放在开头位置
            raf.seek(0);
            byte[] buf=new byte[(int)raf.length()];
            raf.read(buf);//将内容写入buf字节数组中
            
            String  str1=new String(buf,"gbk");
            System.out.println("文件中的内容为"+str1);
            raf.close();
  • 相关阅读:
    头文件stdio与stdlib.h的区别
    宝塔利用git+ webhooks 实现git更新远程同步Linux服务器
    Linux源码安装步骤
    Promise.all和Promise.race区别,和使用场景
    vue显示富文本
    Js实现将html页面或div生成图片
    JS
    关于Swiper和vue数据顺序加载问题处理
    php 数据库备份(可用作定时任务)
    js async await 终极异步解决方案
  • 原文地址:https://www.cnblogs.com/dukc/p/4776868.html
Copyright © 2011-2022 走看看