Добавление и чтение целых чисел в RandomAcessFile из списка.Все, кроме последнего, кажутся "0" - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь записать пять случайных чисел из списка в файл.Я думаю, что мне удается что-то написать, но когда я пытаюсь прочитать файл, все они 0, кроме последнего.Я искал, но большинство из того, что я нашел, просто объясняет, как написать одну int / строку.Я думаю, что проблема заключается в том, как я пишу.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 голосов
/ 03 октября 2018

Как вы сказали, неправильно используя поиск, вы перезаписываете последнее сохраненное число

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

Если вы измените ficheroJugador1.seek(i); на ficheroJugador1.seek(i*4);, вы правильно дадите каждому числу его пробел

(ascii representation)
00100009000300080007
...