Чтение внутреннего файла в Android Studio - PullRequest
0 голосов
/ 06 ноября 2018

Пишу во внутренний файл в Android Studio

 String filename = "output.txt";
            String fileContents = studentNum + ", " + lastName + ", " + firstName + ", " + radioValue + ", " + spinnerInfo + "\n"; // edit this to include all content
            FileOutputStream outputStream;

            try{
                outputStream = openFileOutput(filename, Context.MODE_APPEND);
                outputStream.write(fileContents.getBytes());
                outputStream.close();
            } catch(Exception e){
                e.printStackTrace();
            }
        }

Код позволяет мне писать строки данных, разделенные запятыми. Затем я могу перейти к другому занятию и сразу прочитать все.

  String file = "output.txt";
        String line = "";
        String data = "";

        //File read operation
        try {
            FileInputStream fis = openFileInput(file);  //A FileInputStream obtains input bytes from a file in a file system
            InputStreamReader isr = new InputStreamReader(fis); //An InputStreamReader is a bridge from byte streams to character streams
            BufferedReader br = new BufferedReader(isr);    //Reads text from a character-input stream,
            while ((line = br.readLine()) != null) {
                data += (counter+1) + "\t"+ line +"\n";
                counter++;
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }
        catch (IOException e){
            e.printStackTrace();
        }
        //Show the data
        txtOutput.setText(data);

Однако я хочу иметь возможность читать только одну строку данных на одно действие, и когда я нажимаю кнопку, она переносится вниз на следующую строку данных. И идет в карусельном цикле, поэтому, как только мы дойдем до последней строки, он перейдет к первой строке данных после повторного нажатия кнопки

1 Ответ

0 голосов
/ 06 ноября 2018

Возможно, проще всего просто сохранить указатель номера строки (поскольку вы читаете по строке) и прочитать столько строк, чтобы получить то, что вам нужно в каждом действии. Если файл имеет большой размер или вы по-другому заботитесь о производительности, это не лучший вариант.

Оба InputStream и Reader имеют метод skip(<bytes>). Вы также можете сделать это таким образом. Очевидно, что если вы используете поток, вам нужно читать байты, а не по строкам, поэтому немного больше проблем.

Вы также можете использовать RandomAccessFile с seek() методом. Опять же, к этому обращается байтовый индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...