private static ArrayList<String[]> one = new ArrayList<String[]>();
 ...
 ...
 btnAdd.setOnAction(e -> {
        try{
            String [] lineD = new String[6];
            lineD[0] = txtID.getText();
            lineD[1] = txtG.getText();
            lineD[2] = txtBP.getText();
            lineD[3] = txtD.getText();
            lineD[4] = txtSP.getText();
            lineD[5] = txtCons.getText();
            one.add(lineD);//adds the array to ArrayList
            int i = 0;
            while(i<one.size()){
                output.write((Arrays.deepToString(one.get(i))));
                output.newLine();
                i++;
            }
            txtID.clear();
            txtG.clear();
            txtBP.clear();
            txtD.clear();
            txtCons.clear();
            txtSP.clear();
        } catch (Exception t) {
            System.out.println("An error has occured " + t.getMessage());

        }
    });


根据我的逻辑,该按钮应该从字段中添加文本,将它们扔到数组中,然后将它们放入String数组的ArrayList中。该循环应该将元素数组写入我的文件。
每一次,输出都被复制一次用于第一次添加,然后其余部分被正确写入。

输出:

[鲍勃,山姆,戈格,汤姆,史密斯,贝克]

[鲍勃,山姆,戈格,汤姆,史密斯,贝克]
[拉姆,三明治,男人,最后,厨房,食物]

最佳答案

基本上就是您正在做的事情:

当按下按钮时,将文本添加到one,并将ArrayList one的所有元素写入文件输出流(?)output

您看到逻辑错误了吗?

单击一次后,one是大小为1的ArrayList,具有以下内容:

[bob, sam, goerge, tom, smith, baker]


再次单击时,将另一个元素添加到ArrayList中:

[bob, sam, goerge, tom, smith, baker]
[lahm, sandwhich, man, last, kitchen, food]


然后将这两个元素都写入文件:

while(i<one.size()) {
    output.write((Arrays.deepToString(one.get(i))));
    output.newLine();
    i++;
}


您要做的只是将最新元素写入文件:

String[] lastElement = one.get(one.size()-1));
output.write((Arrays.deepToString(lastElement);

10-05 23:05
查看更多