首页 > 解决方案 > 从列表中向 RandomAcessFile 添加和读取整数。除了最后一个似乎都是“0”

问题描述

我正在尝试将列表中的五个随机数写入文件。我想我正在设法写一些东西,但是当我尝试读取文件时,0除了最后一个之外,它们都是。我已经搜索过,但我发现的大部分内容只是解释了如何编写一个 int/string。我认为问题出在我的写作方式上。writeInt写为四个字节,也许我没有seek()按照规定使用。

这是我的代码。

try {
        RandomAccessFile ficheroJugador1 = new RandomAccessFile("jugador1.dat", "rw");
        for (int i = 0; i < 5; i++) {
            try {
                ficheroJugador1.seek(i);
                int numEscribir = jugador1.numerosAleatorios.get(i);
                ficheroJugador1.writeInt(numEscribir);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        
        for (int i = 0; i < 5; i++) {
            try {
                ficheroJugador1.seek(i);
                try {
                    System.out.println(ficheroJugador1.readInt());
                } catch (IOException e) {
                    e.printStackTrace();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        try {
            ficheroJugador1.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

这导致:

Numbers [10, 9, 3, 8, 7] //我要读写的数字

0

0

0

0

7

标签: javaseekrandomaccessfile

解决方案


正如你所说,如果没有正确使用 seek ,你会覆盖最后保存的数字

(ascii representation)
0010
^
00009
 ^
000003
  ^
000008
   ^
00000007
    ^

如果您更改ficheroJugador1.seek(i);为,ficheroJugador1.seek(i*4);您将正确地为每个数字提供其空间

(ascii representation)
00100009000300080007

推荐阅读