没有按预期读取文件的代码片段?

时间:2013-06-19 05:48:05

标签: java bufferedreader

这里我有一个正在进行的文件读取实用程序,我试图用来从文件中加载不同的子弹射击配置(游戏内对象)配置。

package game.entity.bullet;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.lwjgl.util.vector.Vector2f;

public class ConfigReader {

    public static List<BulletConfiguration> configurations = new ArrayList<BulletConfiguration>();

    public void loadConfigs(String input) throws IOException {
        File file = new File(input);
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.startsWith("START:")) {
                BulletConfiguration b = new BulletConfiguration();
                String name = line.split(": ")[1];
                b.name = name;
                while (!line.startsWith("END:")) {
                    line = reader.readLine();
                    String bt = line.split(" ")[1].toLowerCase();
                    Vector2f bulletPos = new Vector2f(
                            Float.parseFloat(line.split(" ")[2].split(":")[0]),
                            Float.parseFloat(line.split(" ")[2].split(":")[1]));
                    Vector2f bulletVelocity = new Vector2f(
                            Float.parseFloat(line.split(" ")[3].split(":")[0]),
                            Float.parseFloat(line.split(" ")[3].split(":")[1]));
                    b.bullets.add(BulletType.valueOf(bt));
                    b.bullet_spawn_positions.add(bulletPos);
                    b.bullet_velocities.add(bulletVelocity);
                }
                configurations.add(b);
            }
        }
    }
}

以下是一些示例配置:

BEGIN: Cannon
p Standard 0:0 0:1
END:

BEGIN: Triple Cannon
p Small 0:0 -0.25:1
p Small 0:0 0:1
p Small 0:0 0.25:1
END:

这就是我必须帮助解释我想要做的事情。它应该检查何时声明“BEGIN:”,然后检查它是否达到“END:”语句,并将值解析为它们各自的值。

另外,请给我一些关于我的问题的反馈;这是我的第一个,所以我不确定这是否完全可以接受。

1 个答案:

答案 0 :(得分:1)

按以下方式更改while循环:

line = reader.readLine();

    while (!line.startsWith("END:")) {
        String bt = line.split(" ")[1].toLowerCase();
        Vector2f bulletPos = new Vector2f(
                Float.parseFloat(line.split(" ")[2].split(":")[0]),
                Float.parseFloat(line.split(" ")[2].split(":")[1]));
        Vector2f bulletVelocity = new Vector2f(
                Float.parseFloat(line.split(" ")[3].split(":")[0]),
                Float.parseFloat(line.split(" ")[3].split(":")[1]));
        b.bullets.add(BulletType.valueOf(bt));
        b.bullet_spawn_positions.add(bulletPos);
        b.bullet_velocities.add(bulletVelocity);
        line = reader.readLine();
    }

正如@MadProgrammer所指出的那样改变

if (line.startsWith("START:"))

if (line.startsWith("BEGIN:"))