android сохранение logcat в файл на телефоне и чтение его содержимого - PullRequest
0 голосов
/ 08 марта 2019

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

В конце концов я хочу сохранить только строкикоторые включают MediaMetadata (и для этого используют выражение regex), но сейчас у меня возникают проблемы с чтением содержимого файла.

Я считаю, что успешно сохраняю logcat в файл, но моя программа продолжает сбой, как только я вызываю openFileInput для моего пути к файлу.

В моей функции MainActivity я вызываю эту функцию всякий раз, когда нажимаю кнопку:

public void onCreate(Context context) throws Exception {

//write file

super.onCreate();
String filename = "temp";
String filepath = "temp";

if ( isExternalStorageWritable() ) {

    File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyPersonalAppFolder" );
    //appDirectory = /storage/emulated/0/MyPersonalAppFolder

    File logDirectory = new File( appDirectory + "/log" );
    //logDirectory = /storage/emulated/0/MyPersonalAppFolder/log

    filename = "logcat" + System.currentTimeMillis() + ".txt";
    filepath = logDirectory+"/"+filename;
    //filepath = /storage/emulated/0/MyPersonalAppFolder/log/logcat1552017420176.txt
    Log.i("myTag", "filename = "+filename);
    Log.i("myTag", "filepath = "+filepath);

    File logFile = new File( filepath );
    // create app folder
    if ( !appDirectory.exists() ) {
        appDirectory.mkdir();
    }
    // create log folder
    if ( !logDirectory.exists() ) {
        logDirectory.mkdir();
    }
    // clear the previous logcat and then write the new one to the file
try {
    //Process process = Runtime.getRuntime().exec( "logcat -c");
    Process process = Runtime.getRuntime().exec( "logcat -d -f " + logFile );
    //Process process = Runtime.getRuntime().exec( "logcat -e \b(updateMediaMetaData) -f " + logFile );

    } catch ( IOException e ) {
        e.printStackTrace();
    }

    } else if ( isExternalStorageReadable() ) {
        // only readable
    } else {
        // not accessible
    }

    //read file
    Log.i("myTag", "now going to read file at filepath = "+filepath);

    String ret = "tempretoncreate";

    FileInputStream fis;
    Log.i("myTag", " here0");
    fis = openFileInput(filepath);
    Log.i("myTag", " here1");
    StringBuffer fileContent = new StringBuffer("");
    Log.i("myTag", " here2");
    //fis.close();

    Log.i("myTag", " ret = "+ret);

    Log.i("myTag", " end of onCreate() func");
}

** Мои операторы отладки logcat выглядят как

2019-03-07 20: 23: 49.848 4634-4634 / com.example.savefile I / myTag: кнопка нажата 2019-03-07 20: 23: 49.859 4634-4634 / com.example.savefile I / myTag: имя файла= logcat1552019029859.txt 2019-03-07 20: 23: 49.860 4634-4634 / com.example.savefile I / myTag: filepath = /storage/emulated/0/MyPersonalAppFolder/log/logcat1552019029859.txt 2019-03-07 20:23: 49.867 4634-4634 / com.example.savefile I / myTag: теперь собираюсь прочитать файл в filepath = /storage/emulated/0/MyPersonalAppFolder/log/logcat1552019029859.txt 2019-03-07 20: 23: 49.867 4634-4634 / com.example.savefile I / myTag: здесь0 2019-03-07 20: 23: 49.873 4634-4634 / com.example.savefile I / myTag: ошибка вызова onCreate 2019-03-07 20: 23: 49.873 4634-4634 / com.example.savefile I / myTag: end of btnClick () func

Итак, последнее, что вызывается, это мой оператор печати here0, который заставляет меняЯ думаю, что я не правильно вызываю openFileInput для моего пути к файлу ("/storage/emulated/0/MyPersonalAppFolder/loglogcat1552017420176.txt")

Это правильный процесс для чтения в файл в виде строки вмое приложение для Android?

...