FileReader / BufferedReader给了我旧的值

时间:2016-06-30 14:18:38

标签: java bufferedreader

我的应用程序中的一个方法在文件中写出了一些内容。在此之后,我使用相同的应用程序阅读了书面和其他一些信息。这很好用。但是当我的应用程序向文件添加一些信息(覆盖工作),并且我尝试读取它们时,我总是得到我之前读过的旧信息,而在文件中数据已经改变。文件中的格式是正确的,信息在那里(我检查了文件),我总是使用相同的方法进行阅读。 这是我阅读的方法:

public int read(String path) {
    int ret = 0;
    String line = "";
    String[] data = null;
    FileReader fr = null;
    try {
        fr = new FileReader(path);
        BufferedReader br = new BufferedReader(fr);
        line = br.readLine();
        int j = 0;
        while (line != null) {
            data = null;
            data = line.split(" ");
            //in the following line I always get an IndexOutOfBoundsError, after I got the old Information
    load.add(new Load(l[j].getNr(), l[j].getLength(), l[j].getWidth(), l[j].getHight(),
                    Integer.valueOf(data[4]), Integer.valueOf(data[5]), Integer.valueOf(data[6]),
                    Integer.valueOf(data[7]), l[j].getColor()));
            line = br.readLine();
            j++;
        }
        br.close();
        fr.close();
    } catch (IOException e) {
        System.err.println(e.getMessage() + " " + e.getClass());
    }
    return ret;
}

这是写作的方法:

public void write() {
    try {
        File t = new File("data.3kp");
        BufferedWriter bw = new BufferedWriter(new FileWriter(t));
        for (int i = 0; i < load.size(); i++) {
            bw.write(load.get(i).getLength() + " " + load.get(i).getWidth() + " " + load.get(i).getHeight());
         bw.newLine();
        }
        bw.close();
    } catch (IOException e) {
        System.out.println("Error during writing to file");
        e.printStackTrace();
    }
    try {
        Runtime.getRuntime().exec("./3dbpp data.3kp 0 0 0 0");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

请有人帮助我。我不知道什么是错的!

1 个答案:

答案 0 :(得分:0)

您可以使用静态索引来访问动态创建的数组(data[5]data[6]等)中的值,如评论中所述。这些事情给你带来麻烦只是时间问题。要么动态读取它,要么确保始终拥有您想要访问的所有索引,例如

data = line.split(" ");
Integer value1, value2, value3;
if (data.length > 4) {
    value1 = Integer.valueOf(data[4]);
}
// or if you know that all values you require are there as soon as length > 7 is reached:
if (data.length > 7) {
    value2 = Integer.valueOf(data[5]);
    value3 = Integer.valueOf(data[6]);
    value4 = Integer.valueOf(data[7]);
}
...
// and then use your values in the constructor of your Load-class:
load.add(new Load(l[j].getNr(), l[j].getLength(), l[j].getWidth(), l[j].getHight(),
                value1, value2,
                value3, value4, l[j].getColor()));

但是由于您的问题中缺少某些信息,这只是猜测。请复制整个代码或确保复制了重现问题所需的所有内容。 如何l初始化?或者它应该是data