我需要我的代码逐行读取文件,将每个值分配给不同的变量/字符串,然后将其发送到另一个有意图的活动中。 问题是,文件的读取和写入就像它的整个过程一样,这是代码的一部分。:(通过我知道的方式,我应该创建一个方法,并在单击按钮的内部调用它,这样做)
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "resultado1");
//Read text from file
StringBuilder text1 = new StringBuilder();
StringBuilder text2 = new StringBuilder();
StringBuilder text3 = new StringBuilder();
StringBuilder text4 = new StringBuilder();
StringBuilder text5 = new StringBuilder();
StringBuilder text6 = new StringBuilder();
StringBuilder text7 = new StringBuilder();
StringBuilder text8 = new StringBuilder();
StringBuilder text9 = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text1.append(line);
text1.append('\n');
text2.append(line);
text2.append('\n');
text3.append(line);
text3.append('\n');
text4.append(line);
text4.append('\n');
text5.append(line);
text5.append('\n');
text6.append(line);
text6.append('\n');
text7.append(line);
text7.append('\n');
text8.append(line);
text8.append('\n');
text9.append(line);
text9.append('\n');
}
}
catch (IOException e) {
}
Intent savedgame = new Intent(LoadSave.this, ResultSave.class);
savedgame.putExtra("data", text1.toString());
savedgame.putExtra("nomejogador1", text2.toString());
savedgame.putExtra("pontosjogador1", text3.toString());
savedgame.putExtra("nomejogador2", text4.toString());
savedgame.putExtra("pontosjogador2", text5.toString());
if (text6 == null) {
}else{
savedgame.putExtra("nomejogador3", text6.toString());
savedgame.putExtra("pontosjogador3", text7.toString());
}
if (text8 == null) {
}else{
savedgame.putExtra("nomejogador4", text8.toString());
savedgame.putExtra("pontosjogador4", text9.toString());
}
startActivity(savedgame);
}
});
因此,假设我的文件被写入1,2,3,4,5,6,7等。逗号表示行,每当我尝试使用这些值时,下一个活动的输出始终为1 2 3 4 5 6 7 ... etc,总共,我需要能够将这些字符串中的每一个设置为在下一个活动中将textview分开。 我认为我的问题是我将所有行值分配给单个“字符串行”; ?如果是这样,我也不知道如何解决... 我开始学习数组,但我还不知道如何在一个较小的数组聚会中实现所有这些代码行,但是我知道这样做会更好,请不要尝试不建议我这样做在数组中,因为我还没有学会=) 如果我错过了一些信息,请事先告知我!
答案 0 :(得分:1)
请注意,在您的代码中,您会将读取的每一行追加到每个字符串。您需要将每行分别复制到不同的字符串。
您要将文件中的每一行附加到每个StringBuilder
。您是否尝试过使用array of Strings
?
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "resultado1");
//Read text from file
String text[] = new String[9];
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
for (int i = 0; (line = br.readLine()) != null; i++) {
text[i] = new String(line) + "\n";
}
}
catch (IOException e) {
}
Intent savedgame = new Intent(LoadSave.this, ResultSave.class);
savedgame.putExtra("data", text[0].toString());
savedgame.putExtra("nomejogador1", text[1].toString());
savedgame.putExtra("pontosjogador1", text[2].toString());
savedgame.putExtra("nomejogador2", text[3].toString());
savedgame.putExtra("pontosjogador2", text[4].toString());
if (text[5] == null) {
}else{
savedgame.putExtra("nomejogador3", text[5].toString());
savedgame.putExtra("pontosjogador3", text[6].toString());
}
if (text[7] == null) {
}else{
savedgame.putExtra("nomejogador4", text[7].toString());
savedgame.putExtra("pontosjogador4", text[8].toString());
}
startActivity(savedgame);
}
});
如果不涉及太多操作(使用单个追加操作),则使用常规String
类而不是StringBuilder
更为有效。
即使您拥有使用StringBuilder
,也可以重用一个实例;不要为每个字符串创建单独的实例。
此外,您的字符串从1开始索引。我已经进行了必要的更改,因此索引从0开始,这是常规约定。如果是数组,起始索引为1,则意味着您定义了该对象的一个额外实例,这浪费了内存。