文件读取Java

文件读取Java,java,arrays,Java,Arrays,我正在做一个简单的游戏,保存和加载。到目前为止,我有保存游戏工作,它保存所有对象的位置到一个.dat文件。每行有3个坐标(x、y、z),由冒号分割。例如: 23.762622833251953:3.887784719467163 22.5:0.5:18.5 23.5:0.5:20.5 26.5:0.5:5.5 28.5:0.5:21.5 30.5:0.5:4.5 33.5:0.5:19.5 35.5:0.5:4.5 38.5:0.5:15.5 39.5:0.5:3.5 41.5:0.5:9.5

我正在做一个简单的游戏,保存和加载。到目前为止,我有保存游戏工作,它保存所有对象的位置到一个.dat文件。每行有3个坐标(x、y、z),由冒号分割。例如:

23.762622833251953:3.887784719467163
22.5:0.5:18.5
23.5:0.5:20.5
26.5:0.5:5.5
28.5:0.5:21.5
30.5:0.5:4.5
33.5:0.5:19.5
35.5:0.5:4.5
38.5:0.5:15.5
39.5:0.5:3.5
41.5:0.5:9.5

第一行是玩家第一人称视图的坐标。这很容易实现,因为我将每个坐标传递到一个数组中,因此x坐标是第一个元素[0],z坐标是第二个元素[1]。y坐标始终是相同的,即使对于块也是如此,所以我没有费心保存它,但出于某种原因,我为块保存了它

以下是保存游戏的方法:

public void saveGame()
{
    File file = new File("quickSave.dat");

    try {
        FileWriter writer = new FileWriter(file);        
        writer.write(env.getCameraX()+":"+env.getCameraZ()+"\n");
        for (int row = 0; row < map.length; row++)
        {
            for (int col = 0; col < map[row].length; col++)
            {
                if (map[row][col] != null) {
                    EnvObject block = map[row][col];
                    writer.write(block.getX()+":"+block.getY()+":"+block.getZ()+"\n");
                }
            }
        }
        writer.close();
        JOptionPane.showMessageDialog(null, "Game saved");
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

BufferedReader.readLine()
将帮助您。您需要使用
String.split()
拆分读取的字符串,并使用
float.parseFloat()
newfloat(someString)
将每个返回的字符串转换为一个浮点

我想这就是你要问的

String line = null;
while ((line = bufferedReader.readLine()) != null)
{
    String[] coords = line.split(":");
    EnvObject block = new EnvObject(Float.parseFloat(coords[0],
                                    Float.parseFloat(coords[1],
                                    Float.parseFloat(coords[2]
                                    );
    someArray.add(block);
}

使用序列化如何?将状态变量存储到
ObjectOutputStream
中,并从
ObjectInputStream
加载它们。让JVM为您处理所有这些低级簿记,除非您确实需要一种可读和可编辑的格式。

您能把问题弄清楚吗?这是一个故事,不是一个问题。你真的需要将它们保存为纯文本吗?嗯。。。文件中的每一行都是一对坐标。我想把每一行坐标传递给一个对象,让它在3D环境中有一个位置。我该怎么做?你是专门询问涉及的数学问题、这些对象的实用表示、解析输入还是其他问题?用户不知道他想要什么。我用玩家的坐标来做,效果很好。问题是读取任何0行并获取每行上的坐标,然后将坐标传递给对象,以确定其在三维空间中的位置。@bobby williams但为什么元素[0]、元素[1]和元素[2]不起作用?这应该包含他们工作的三个坐标。我用前两个元素来表示球员的位置。我还保存了玩家可以在整个环境中随机放置的这些块,这是第一行下面的所有其他行。我不能只把“添加块,x坐标为元素2,z坐标为元素3”,可能有20个块,50个块,或者不管玩家放置多少块。@bobby williams。好的,对不起,我还是不明白这个问题。@James-那我怎么从第二行开始呢?
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
    String[] coords = line.split(":");
    EnvObject block = new EnvObject(Float.parseFloat(coords[0],
                                    Float.parseFloat(coords[1],
                                    Float.parseFloat(coords[2]
                                    );
    someArray.add(block);
}