Android студия, открыть файл, непрерывно писать, а затем закрыть - PullRequest
0 голосов
/ 18 февраля 2020

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

Я могу открывать / записывать / закрывать файл каждый раз, когда создаются данные, но я не уверен в том, сколько вычислительной мощности это использует, поскольку он постоянно открывает и закрывает файл

  String data= reading1","+reading2+","+time +"/n";
        try {
            FileOutputStream out = openFileOutput("data.csv", Context.MODE_PRIVATE);
            out.write(data.getBytes());
            out.close();
        } catch (Exception e) {
            e.printStackTrace();

Я бы предпочел, чтобы файл открывался при нажатии кнопки запуска.

if ( v.getId() == R.id.start ){
                // checks which button is clicked
                Log.d("dennis", "Scan working"); //logs the text
                // open a file
                try {
                    FileOutputStream out = openFileOutput("data.csv", Context.MODE_PRIVATE);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

, но когда дело доходит до закрытия файл, никакие опции для .close () не появляются, когда out напечатано

if ( v.getId() == R.id.stop ){
                // checks which button is clicked

                out. // no valid options appear
                messageValue.setText(R.string.stopButtonText);// changes the hallo world text
                readNoRead=false;

            }

Должны ли все операции открытия / записи / закрытия быть вместе или можно

***open file***
-----
Cycle through all the data
-----
***Close file***

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы должны хранить ссылку на ваш FileOutputStream на верхнем уровне в вашем классе.

Пример с вашим кодом:

FileOutputStream out;

void clickStart() {
    if (v.getId() == R.id.start){
        // checks which button is clicked
        Log.d("dennis", "Scan working"); //logs the text
        // open a file
        try {
            out = openFileOutput("data.csv", Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
}

void writeData() {
    String data= reading1+","+reading2+","+time +"/n";
    try {
        out.write(data.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

void clickStop() {
    if (v.getId() == R.id.stop) {
        try {
            out.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
        messageValue.setText(R.string.stopButtonText);// changes the hello world text
            readNoRead=false;
        }
}
1 голос
/ 18 февраля 2020

Определенно можно открывать, обрабатывать и закрывать файл в одном блоке, не закрывая файл.

Ваша переменная out не отображает никаких предложений методов, поскольку она не была определена в этом блоке. Измените строку

FileOutputStream out = openFileOutput("data.csv", CONTEXT.MODE_PRIVATE);

на

out = openFileOutput("data.csv", CONTEXT.MODE_PRIVATE); 

, а затем добавьте FileOutputStream out; к строке над первым оператором if (вне блока).

Возможно, вы также захотите взглянуть на «try-catch-finally» или «try with resources» как варианты закрытия файлов в блоке try-catch.

...