(4)JavaSE1:RandomAccessFile(下)

1.RandomAccessFile基于指针的读写形式

package raf;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
 * 使用RAF读写基本类型数据,以及了解RAF基于指针的读写形式
 */
public class RAFDemo3 {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
        //获取当前指针位置
        long pos = raf.getFilePointer();//0
        /*如何在文件中心写出int的最大值*/
        int max = Integer.MAX_VALUE;//int的最大值的二进制表现形式为:01111111 11111111 11111111 11111111
        double a = 123.12;
        long b = 123L;
//        raf.write(max>>>24);//01111111
//        raf.write(max>>>16);//11111111
//        raf.write(max>>>8);//11111111
//        raf.write(max);//11111111
        raf.writeInt(max);//连续写出四个字节,将int值写出,等同于上面的四句
        System.out.println("当前指针位置:"+raf.getFilePointer());//4
        raf.writeDouble(a);
        System.out.println("当前指针位置:"+raf.getFilePointer());//12
        raf.writeLong(b);
        System.out.println("当前指针位置:"+raf.getFilePointer());//20
        System.out.println("读写完毕");

        raf.seek(4);//移动指针位置到第12个字节位置
        double d =  raf.readDouble();
        System.out.println(d);
        long e = raf.readLong();
        System.out.println(e);
        System.out.println("当前指针位置:"+raf.getFilePointer());

        raf.seek(0);// 从0开始读取long值
         long l = raf.readLong();
        System.out.println(l);

        //修改long值
        raf.seek(12);
        raf.writeLong(123456789L);
        System.out.println("long值修改完毕!");

        raf.seek(12);
        long x = raf.readLong();
        System.out.println(x);
        raf.close();
    }
}

2.读取字符串

package raf;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 读取字符串
 */
public class ReadStringDemo {
    public static void main(String[] args) throws IOException {
        RandomAccessFile scr = new RandomAccessFile("fos.txt","r");
//        int d = scr.read();
//        System.out.println(d);
//        char c = (char)d;
//        System.out.println(c);

        byte[] data = new byte[(int) scr.length()];
        scr.read(data);
        String str = new String(data,"UTF-8");
        System.out.println(str);
        scr.close();

    }
}

3.RandomAccessFile实现注册功能

package raf;
/**
 * 用户注册功能
 * 程序启动后要求用户在控制台顺序输入:用户名,密码,昵称和年龄
 * 年龄为int值,其余是字符串。然后将该用户写入user.dat文件保存。
 *
 */
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;

public class RegDemo {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入用户名称:");
        String username = scan.nextLine();
        System.out.println("请输入密码:");
        String password = scan.next();
        System.out.println("请输入昵称:");
        String nickName = scan.next();
        System.out.println("请输入年龄:");
        int age = scan.nextInt();
        RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");
        //先将指针移动到文件末尾
        raf.seek(raf.length());

        //写用户名
        byte[] data = username.getBytes("UTF-8");
        //对数组扩容
        data = Arrays.copyOf(data,32);
        raf.write(data);

        //写密码
        data = password.getBytes("UTF-8");
        //对数组扩容
        data = Arrays.copyOf(data,32);
        raf.write(data);

        //写昵称
        //UnsupportedEncodingException:UTF-8  字符集名字拼写不对会抛出异常
//        data = nickName.getBytes("UFT-8");
        data = nickName.getBytes("UTF-8");
        data = Arrays.copyOf(data,32);
        raf.write(data);

        //写年龄
        raf.writeInt(age);
        System.out.println("注册完毕!");
        raf.close();
    }
}

4.显示所有用户

package raf;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 读取所有用户信息
 */
public class ShowAllUserDemo {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf = new RandomAccessFile("raf.dat","r");

        for(int i=0;i<raf.length()/100;i++) {
            //读取用户名
            byte[] data = new byte[32];
            raf.read(data);
            String username = new String(data, "UTF-8").trim();

            //读取密码
            raf.read(data);
            String password = new String(data, "UTF-8").trim();

            //读取昵称
            raf.read(data);
            String nickName = new String(data, "UTF-8").trim();

            //读取年龄
            int age = raf.readInt();
            System.out.println(username + "," + password + "," + nickName + "," + age);
            raf.close();
        }
    }
}

5.写字符串

package raf;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 写字符串
 */
public class WriteStringDemo {
    public static void main(String[] args) throws IOException {
        /*
            无论什么字符集,英文部分都是ASC编码那一段,单字节表示英文,数字,符号。
            整数97的二进制与ASC编码中的'a'的二进制码一样

         */
        RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
        //写入英文,将所有小写字母写入文件
        for(int i=0;i<26;i++){
//            raf.write(97+i);
            raf.write('a'+i);
        }
        //写中文
        String str = "我爱学习我的祖国";
        byte[] data = str.getBytes("UTF-8");
        raf.write(data);
        System.out.println("写出完毕!");
        raf.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值