Как мне написать / прочитать массив объектов в / из файлов? - PullRequest
0 голосов
/ 01 июня 2018

РЕДАКТИРОВАТЬ: Неважно, я просто невероятно тупой, он работает абсолютно нормально, я просто испортил при вызове метода, я заставил его работать только в условиях, которые не могут быть выполнены в тот момент, все же я хотел бы любитьчтобы узнать, сделали бы вы это так, как я, или использовали бы другой способ

Извините, я знаю, что этот вопрос задавали бесчисленное количество раз, но я не смог найти разницу междуздесь и у меня есть вещи, которые не работают.

Кроме того, если есть лучший способ добиться того, что я пытаюсь сделать, скажите мне, я сейчас изучаю Java в школе, поэтому яЯ далек от понимания того, что я делаю ...

Итак, моя проблема, мы должны были создать игру для класса, я решил сделать Pacman, и она работает просто отлично.Единственное, что я хочу изменить, - это возможность сохранять и загружать созданные вами уровни, и я подумал, что собираюсь сделать это, сохранив их в файлах.

Теперь мой уровень состоит из квадратов, которые я назвал «FELD».Вот как это выглядит:

import java.io.Serializable;
public class FELD implements Serializable
{
    private static final long serialVersionUID = 1L;
    public int inhalt, inhaltneu; //content, 0=wall, 1=food, 2=empty 3=start
    public int x, y;
    public static int groesse; //size of the square
    public FELD(int a, int b)
    {
        x=a*groesse;
        y=b*groesse;
        PACMAN.zf.zeichneRechteck(x, y, groesse, groesse); //draws a rectangle using a class we have to use in school
        inhalt=0;
    }
}

Я оставил два других метода, потому что они не должны быть важны для этого.

Теперь, чтобы сохранить их, я создал класс под названием "LEVELFILE ":

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;;
public class LEVELFILE
{
    public FELD[][] lvl;
    public LEVELFILE()
    {

    }

    public boolean speichern(FELD[][] a) {
        lvl=a;

        String name="lvl1.ser";
        try {
            FileOutputStream fos = new FileOutputStream(name);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(lvl);
            oos.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
        PACMAN.zf.fuelleRechteck(0, 0, 100, 100, "rot"); //draws a red rectangle to tell me it's done saving, works
        return true;
    }

    public FELD[][] ladenlvl1() {
        String name="lvl1.ser";
        try {
            FileInputStream fis = new FileInputStream(name);
            ObjectInputStream ois = new ObjectInputStream(fis);
            lvl = (FELD[][]) ois.readObject();
            ois.close();
        }

        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        PACMAN.zf.fuelleRechteck(0, 0, 100, 100, "gruen"); //draws a green rectangle to tell me it's done loading, doesn't happen
        return lvl;
    }
}

Итак, несколько вещей, во-первых, можно ли просто сказать oos.writeObject (lvl), когда lvl является двумерным массивом?

То же самоевещь для чтения, это нормально?

Кроме того, что это за printStackTrace () ;?Я обнаружил это здесь несколько раз, поэтому я просто скопировал его, но что он на самом деле делает?

Поскольку я не получаю зеленый прямоугольник, программа должна рисовать, я думаю, что она как-то застревает,но я не знаю, где это будет.Это то, на что я надеялся, что вы, ребята, могли бы сказать мне.

Кроме того, если вы знаете лучший / более простой способ сохранения моих уровней в файл, пожалуйста, скажите мне, как я уже сказал, я далеконичего не зная об этом.

И, так как это проект, которым мы занимались в школе, я сначала спросил моего учителя, но он сказал, что он никогда раньше не использовал ObjectOutputStream и ObjectInputStream, поэтому он не можетпомоги мне, вот почему я сейчас здесь.

...