Java RandomAccessFile基本的用法

一、认识RandomAccessFile类

RandomAccessFile是Java提供的对文件内容的访问,既能够读取文件,也能够写文件;

RandomAccessFile支持随机访问文件,可以访问文件的任意位置。

(1)打开文件,有两种打开模式-----“rw”(读写)、“r”(只读)

RandomAccessFile raf=new RandomAccessFile(file,“rw”);

RandomAccessFile能够随机读取文件的内容是因为存在一个指针,记录读取或者写入的位置,打开文件是pointer=0;

(2)写方法

写方法一次只能写入一个字节,写入后指针指向下一个位置

raf.write(int);//斜土的是int的后8位

(3)读方法

同样的读方法也是一次读取一个字节

int b=raf.read();

(4)文件读写完成后要关闭

raf.close();

简单操作

package com.neuedu.demo01;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.util.Arrays;

public class RandomAccessFiledemo {
    public static void main(String[] args)throws IOException {
     File demo=new File("demo");
     if (!demo.exists()) {
         demo.mkdir();
     }
     File file=new File(demo,"raf.bat");
     if (!file.exists()) {
         file.createNewFile();
     }
     RandomAccessFile raf=new RandomAccessFile(file, "rw");
    
     System.out.println("向文件中写入");
     raf.write(‘A‘);   //写入一个字符,只会写入第八位
     raf.write(‘B‘);
     int i=112324;
     //用write方法每次只能写一个字节,如果要把i写进去需要写4次
     raf.write(i>>>24);
     raf.write(i>>>16);
     raf.write(i>>>8);
     raf.write(i);
     raf.writeInt(i);                         //也可以直接写入一个整数,占4个字节,底层实现就是上面的方法
     raf.writeUTF("这是一个UTF字符串");         // 这个长度写在当前文件指针的前两个字节处,可用readShort()读取 
     raf.writeDouble(8.236598);               // 占8个字节 
     raf.writeBoolean(true);                  // 占1个字节 
     raf.writeShort(395);                     // 占2个字节 
     raf.writeLong(2325451l);                 // 占8个字节 
     raf.writeFloat(35.5f);                   // 占4个字节 
     raf.writeChar(‘a‘);                      // 占2个字节 
     String string="中";
     byte [] by=string.getBytes();
     raf.write(by);
     System.out.println(raf.getFilePointer());
    
    
    
     //读取文件,把指针移到读取的位置---利用的是seek()
     raf.seek(0);                                                 ///将指针移到文件的开头
     //一次性读取,就是把文件中的内容都读取到字节数组中
     byte [] buffer=new byte[(int)raf.length()];
     raf.read(buffer);   
     //将文件一次性读取到字节数组中
     System.out.println("输出文件全部内容:");
     System.out.println(Arrays.toString(buffer));
     for (byte b : buffer) {
         System.out.print(Integer.toHexString(b &0xff)+" ");      //以十六进制输出
     }
     System.out.println();
     raf.seek(2);                                                //将指针移到第三个字节位置
     int readInt = raf.readInt();                                //读取一个整数
     System.out.println(readInt);
     raf.skipBytes(4);                                           //跳过一个int
     System.out.println(raf.readUTF());                          //输出UTF语句
    
    
    }

}

时间: 2024-10-29 07:13:39

Java RandomAccessFile基本的用法的相关文章

java RandomAccessFile类文件基本操作

RandomAccessFile类是java中仿C的文件操作方法,下面通过实例演示RandomAccessFile类对文件的基本操作,深入了解请查看Java API文档.(注:RandomAccessFile类大多不被采用) 上代码 import java.io.*; public class AccessFileDemo { public static void main(String[] args) { Student stu1=new Student("Zhang San",10

Java下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

java之finally的用法

package com.smbea.demo.tryCatchFinally; /** * java之finally的用法 * @author hapday * @2017年2月5日 @上午12:21:16 */ public class TryCatchFinallyDemo { public static void main(String[] args) { hasException(); System.out.println("\n-----------------------------

java基础之泛型用法

1.什么是泛型 泛型是java中保障类型安全的一种机制.它通过对变量类型的假设,实现变量类型的进行限制,从而在一定程度上保证程序编译时变量类型的安全.反之,如果没有泛型,这些假设则只存在于程序员的大脑中,这样会导致类型转换的异常在程序运行时才被发现. //不用泛型 List list1 = new ArrayList(); list1.add(1); Object o = list1.get(0); //返回Object类型对象 Integer i = (Integer) o; //需预先知道类

java中stringBuilder的用法

java中stringBuilder的用法 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的

Java中输入的用法

Java中输入 1. 读取输入 1)构建一个Scanner,附属到System.in Scanner in = new Scanner(System.in); 此时可以使用Scanner类的各种方法来读取输入.例如:nextLine方法来读取一行输入 System.out.print("What is your name?"); String name = in.nextLine(); nextLine():    读取的一行中可能包含空格 next():           读取单个

java基础之synchronized用法

首先,参考文章:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html PS:参考文章很长,但内容非常丰富,若是初学者,更要有耐心读完. 第二,个人小结: 关于synchronized关键字的作用: 1.在某个对象的所有synchronized方法中,在某一时刻,只能有一个唯一的一个线程去访问这些synchronized方法 2.如果一个方法是synchronized方法,那么该synchronized关键字表示给当前对

Java equals和toString用法

1.代码 User.java public class User{ String name; int age; public User(String name,int age){ this.name = name; this.age = age; } public boolean equals(Object obj){ if(this == obj) return true; boolean b = obj instanceof User; if(b){ User u = (User)obj;

Java RandomAccessFile 文件写入

public void mouseDown(MouseEvent e) { try{ //指定目标文件 RandomAccessFile F = new RandomAccessFile("F:\\test.txt","rw"); //检索文件长度 long filelength = F.length(); // String content = text.getText(); //指针指向最后一位 F.seek(filelength); F.writeBytes(