文件输入/输出,存储数据
好的,让我们再试一次,对于不好的标题感到抱歉,我不知道该怎么称呼它。我之前没有做过很多文件I/O,我个人认为Java绝对是糟糕的,但我必须这样做。文件输入/输出,存储数据
一些背景信息,这是我的Conway的生命游戏项目,我的所有其他代码都可以正常工作,现在我只需要执行I/O。
我正在阅读文本文件,看起来像this。
因此,这样做的前两个数字是数组需要的大小,后面的字符串是不相关的。之后就是这个例子中的单元格排列,就是滑翔机的排列。现在我的问题是,我不知道如何将第一行存储在字符串中,其余部分存储在数组中。以下是我所做的事情,并为自己的大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滑翔机)的令牌,以及创建了一个实例化的数组中的值10和20
然后继续循环访问数组的行和列,然后循环输入数组的每一行,然后遍历该行的每个字符以在其相应位置添加到数组中。
但是,这似乎并没有工作,我敢肯定有一个更简单和有效的方式来做到这一点。所以我再问一次,有谁能告诉我做这个I/O的简单方法吗?我不需要代码,只是解释如何这样做。
在此:
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
的所有单元中拥有文件最后一行的最后一个字符。这可能不是你想要做的。
编辑:如果我理解正确,文件开头的数字就是行数和后面数据的列数。然后您只需使用两个外部循环,并使用row
和col
分别访问list
中的行和该行中的字符。
不,这不是我想做的事情,我想要的是拿一个角色并把它放到阵列的适当位置。 – user123 2013-02-26 01:21:30
我已经编辑了我的答案,并提供了关于如何写它的建议。 – 2013-02-26 01:28:11
_ How does not it working?怎么了? – SLaks 2013-02-26 00:58:26
这看起来像你的[上一个问题]的副本(http://stackoverflow.com/questions/15078473/file-input-output)。如果是这样,请删除这一个,并编辑旧的添加任何改进。 – 2013-02-26 00:58:46
“似乎没有工作”不是很有帮助;一些更多的信息将是有用的。作为关于如何加速它的一般观察,您可以读取数组大小,创建数组,然后读取文件的每一行并使用[String.toCharArray()](http://docs.oracle.com/JavaSE的/ 6 /文档/ API /爪哇/郎/字符串。html#toCharArray())将文件的每一行分配给数组。 – 2013-02-26 01:19:49