从列表向RandomAcessFile添加和读取整数。除了最后一个似乎全部为“ 0”

时间:2018-10-03 18:46:03

标签: java seek randomaccessfile

我正在尝试将五个随机数从列表写入文件。 我认为我正在设法写一些东西,但是当我尝试读取文件时,除最后一个文件外,它们都是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();
    }

结果是:

  

数字[10、9、3、8、7] //我要写入和读取的数字

     

0

     

0

     

0

     

0

     

7

1 个答案:

答案 0 :(得分:1)

如您所说,由于未正确使用查找,您将覆盖最后保存的号码

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

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

(ascii representation)
00100009000300080007