Здравствуйте. Я пытаюсь сохранить содержимое 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?