Эй, люди, У меня есть текстовый файл, который мне нужно добавить в мое приложение. Теперь я могу переписать весь файл, включающий изменения в определенную строку, но я надеюсь, что есть более эффективное решение. Я знаю номер строки, который мне нужно добавить, но я не уверен, как добраться до этой строки, желательно, не зацикливая все остальные, если это не единственный способ. Это то, что у меня есть до сих пор, который воссоздает весь файл: `
try {
FileOutputStream fOut = openFileOutput("tasklist.txt", MODE_APPEND);
BufferedOutputStream buf = new BufferedOutputStream(fOut);
OutputStreamWriter osw = new OutputStreamWriter(buf);
BufferedWriter writer = new BufferedWriter(osw);
for(int count = 0; count < str.size(); count++)
{
writer.write(str[count]);
writer.write("\r\n");
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "Error saving txt file", Toast.LENGTH_SHORT);
}`
Надеюсь, кто-то знает более эффективное решение. Спасибо.
Есть несколько более чистых способов, но при обработке файлов нет более эффективного способа (что я знаю). Вы в основном переходите от начала и до конца, как вы это делали, и добавляете данные. Это то, как работает файл ввода/вывода (это не приложение Android или Java).
Тем не менее, вы можете попробовать FileWriter немного подобрать его (параметр "true" для ctor означает append):
FileWriter writer = new FileWriter(aFile, true));
try {
writer.write("append here\n");
} finally {
writer.close();
}
Следует помнить, что FileWriter использует кодировку по умолчанию для системы. Это должно быть хорошо на Android, но будьте осторожны с ним в целом.
Вот несколько хороших общих методов работы с чтением и записью файлов с Java.
Кроме того, в зависимости от того, что вы делаете с этим файлом, который вы добавляете (как часто вы редактируете один и тот же файл и из каких процессов), вам может потребоваться сделать его копию, а также справиться с fysnc, чтобы вы не потеряли данные на устройствах Android, использующих журналируемые файловые системы.
Чтобы сделать ваше приложение более эффективным, возможно, вы можете кэшировать данные в памяти и выписывать весь файл (а не добавлять) через определенные промежутки времени или когда вы закончите. Если у вас много данных, DB может быть даже уместным.