逐行读取文件并按意图传递每个值

时间:2019-03-07 15:00:38

标签: android

我需要我的代码逐行读取文件,将每个值分配给不同的变量/字符串,然后将其发送到另一个有意图的活动中。 问题是,文件的读取和写入就像它的整个过程一样,这是代码的一部分。:(通过我知道的方式,我应该创建一个方法,并在单击按钮的内部调用它,这样做)

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分开。 我认为我的问题是我将所有行值分配给单个“字符串行”; ?如果是这样,我也不知道如何解决... 我开始学习数组,但我还不知道如何在一个较小的数组聚会中实现所有这些代码行,但是我知道这样做会更好,请不要尝试不建议我这样做在数组中,因为我还没有学会=) 如果我错过了一些信息,请事先告知我!

1 个答案:

答案 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,则意味着您定义了该对象的一个​​额外实例,这浪费了内存。