如何在文件中写入/读取对象数组?

时间:2018-06-01 12:58:26

标签: java arrays multidimensional-array objectinputstream objectoutputstream

编辑:没关系,我只是非常愚蠢,它工作得非常好,我只是在调用方法时搞砸了,我让它只在那个时候无法满足的条件下运行,我仍然要爱要知道你是否会像我那样做或者会用其他方式

对不起,我知道这个问题已经被无数次询问了,但是我无法找到这里和我的工作之间的区别,这是无效的。

另外,如果有更好的方法来实现我想要做的事情,请告诉我,我现在只是在学校学习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;
    }
}

所以,有一些事情,首先,当lvl是一个二维数组时,可以只说oos.writeObject(lvl)吗?

阅读同样的事情,那很好吗?

另外,这是什么printStackTrace();?我发现在这里多次,所以我只是复制了它,但它实际上做了什么?

由于我没有得到绿色矩形,程序应该绘制,我想它会以某种方式卡住,但我不知道它会在哪里。这就是我希望你们能告诉我的。

另外,如果您知道将我的关卡保存到文件的更好/更简单的方法,请告诉我,正如我所说,我对此一无所知。

而且,既然这是我们在学校一直在做的项目,我确实先问过我的老师,但他说,他以前从未使用过ObjectOutputStream和ObjectInputStream,所以他无法帮助我,这就是为什么我在这里的权利现在

0 个答案:

没有答案