当前位置:首页 > 操作系统 > MacOs

Java的RandomAccessFile对文件内容进行读写

Java提供的对文件内容的访问,她既可以读文件,也可以写文件,并且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()的方法。下面就是例子:

 

<span style="color: #008000;">//</span><span style="color: #008000;">创建相对路径的文件,就是在这个项目中创建一个文件夹</span>
        File file=<span style="color: #0000ff;">new</span> File("random"<span style="color: #000000;">);
        </span><span style="color: #0000ff;">if</span>(!<span style="color: #000000;">file.exists()) {
            file.mkdir();
        }
        File fileName</span>=<span style="color: #0000ff;">new</span> File(file,"javaio.txt"<span style="color: #000000;">);
        </span><span style="color: #0000ff;">if</span>(!<span style="color: #000000;">fileName.exists()) {
            fileName.createNewFile();</span><span style="color: #008000;">//</span><span style="color: #008000;">创建文件</span>
<span style="color: #000000;">        }
        </span><span style="color: #008000;">//</span><span style="color: #008000;">创建一个RandomAccessFile的对象,并指定模式rw,能读能写,
        </span><span style="color: #008000;">//</span><span style="color: #008000;">注意:必须是文件,不能是路径</span>
        RandomAccessFile raf=<span style="color: #0000ff;">new</span> RandomAccessFile(fileName,"rw"<span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">获取此时的文件指针的位置,起始位置为0</span>
<span style="color: #000000;">        System.out.println(raf.getFilePointer());
        </span><span style="color: #008000;">//</span><span style="color: #008000;">向文件中写入字符A,字符类型有两个字节,但她写入的是后八位的字节
        </span><span style="color: #008000;">//</span><span style="color: #008000;">字符A正好可以用后八位的字节表示出来</span>
        raf.write(‘A‘<span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">字符的位置会自动向后移动,文件指针会向后自动移动</span>
        System.out.println("输入一个字符之后,文件指针的位置"+<span style="color: #000000;">raf.getFilePointer());
        raf.write(</span>‘B‘<span style="color: #000000;">);
        
        
        </span><span style="color: #008000;">//</span><span style="color: #008000;">每次write只能写入一个字节,如果要把i写进去,就需要写四次</span>
        <span style="color: #0000ff;">int</span> i=0x7fffffff<span style="color: #000000;">;
        raf.write(i</span>>>>24 & 0xff);<span style="color: #008000;">//</span><span style="color: #008000;">写入高八位的</span>
        raf.write(i>>>16 & 0xff<span style="color: #000000;">);
        raf.write(i</span>>>>8   & 0xff<span style="color: #000000;">);
        raf.write(i);</span><span style="color: #008000;">//</span><span style="color: #008000;">写入低八位</span>
        System.out.println("写入整数的时候文件指针的位置是"+<span style="color: #000000;">raf.getFilePointer());
        
        
        </span><span style="color: #008000;">/**</span><span style="color: #008000;">
         * 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;
    }
         </span><span style="color: #008000;">*/</span>
        
        <span style="color: #008000;">//</span><span style="color: #008000;">也可以直接写入int整数</span>
<span style="color: #000000;">        raf.writeInt(i);
        
        </span><span style="color: #008000;">//</span><span style="color: #008000;">写入一个汉字,汉字为两个字节</span>
        String str="欢迎学习java"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">byte</span>[] b=str.getBytes("gbk"<span style="color: #000000;">);
        raf.write(b);
        System.out.println(</span>"此时的长度为"+<span style="color: #000000;">raf.length());
        
        
        </span><span style="color: #008000;">//</span><span style="color: #008000;">读文件必须将文件指针放在开头位置</span>
        raf.seek(0<span style="color: #000000;">);
        </span><span style="color: #0000ff;">byte</span>[] buf=<span style="color: #0000ff;">new</span> <span style="color: #0000ff;">byte</span>[(<span style="color: #0000ff;">int</span><span style="color: #000000;">)raf.length()];
        raf.read(buf);</span><span style="color: #008000;">//</span><span style="color: #008000;">将内容写入buf字节数组中</span>
<span style="color: #000000;">        
        String  str1</span>=<span style="color: #0000ff;">new</span> String(buf,"gbk"<span style="color: #000000;">);
        System.out.println(</span>"文件中的内容为"+<span style="color: #000000;">str1);
        raf.close();</span>

 

Java的RandomAccessFile对文件内容进行读写

标签:

本文系统来源:http://www.cnblogs.com/dukc/p/4776868.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐