文件输入/输出,存储数据

时间:2013-02-26 00:56:58

标签: java

好吧,让我们再试一次,抱歉这个糟糕的头衔我不知道怎么称呼这个。我之前没有做太多文件I / O,我个人认为Java绝对可怕,但我必须这样做。

一些背景信息,这是我的Conway的生命游戏项目,我的所有其他代码工作正常,我现在只需要进行I / O.

我正在从文本文件中读取,看起来像this

所以这样做的前两个数字是数组所需的大小,后面的String是无关紧要的。之后是本例中的单元布置数组,它是滑翔机的数组。现在我的问题是我不知道如何在String中存储第一行,其余的在数组中。以下是我所做的事情,并为nO∞的大O做好准备。

    public char[][] fileIO(){
    ArrayList<String> list = new ArrayList<String>();
    char[][] newArray;
    String[] tokens;
    BufferedReader reader;
    String inputLine;

    try{
        reader = new BufferedReader(new FileReader("untitled.txt"));
        while((inputLine = reader.readLine()) != null){
            list.add(inputLine);
        }
        reader.close();
    }catch (IOException e){
        System.out.println(e);
    }

    tokens = list.get(0).trim().split("\\s+");
    newArray = new char[Integer.parseInt(tokens[0])][Integer.parseInt(tokens[1])];

    for(int row = 0; row < newArray.length; row++){
        for(int col = 0; col < newArray[row].length; col++){
            for(int line = 1; line < list.size(); line++){
                for(int Char = 0; Char < list.get(line).length(); Char++){
                    newArray[row][col] = list.get(line).charAt(Char);
                }
            }
        }
    }
    return newArray;
}

我知道缺少评论,所以我会尝试解释我现在尝试做的事情;

  • 我从文件中读取并将其全部存储在ArrayList

  • 得到了第一个像(10 20 Glider)的标记,并创建了一个实例化的数组,其值为10和20

  • 然后继续循环遍历数组的行和列,然后循环输入数组的每一行,然后循环遍历该行的每个字符,以便在其所在位置添加到数组中。

然而,这似乎不起作用,我确信有一种更简单有效的方法。所以我再问一遍,有谁能告诉我一个更简单的方法来做这个I / O?我不需要代码,只需要解释如何操作。

1 个答案:

答案 0 :(得分:2)

在此:

for(int row = 0; row < newArray.length; row++){
        for(int col = 0; col < newArray[row].length; col++){
            for(int line = 1; line < list.size(); line++){
                for(int Char = 0; Char < list.get(line).length(); Char++){
                    newArray[row][col] = list.get(line).charAt(Char);
                }
            }
        }
    }

您有两个正在浏览newArray网格的外部循环,以及两个正在浏览文件行的内部循环。通过这样做,您实际上是将文件的每一行的每个字符写入网格的每个单元格中,一个接一个。最后,您将在newArray的所有单元格中拥有文件最后一行的最后一个字符。这可能不是你想要做的。

编辑:如果我理解正确,文件开头的数字就是行数和后面数据的列数。然后你只需要使用两个外部循环,并使用rowcol分别访问list中的行和行中的字符。