Очистка содержимого файла во внутреннем хранилище на Android
У меня есть класс регистрации для записи в файл во внутреннем пространстве приложения. Всякий раз, когда файл журнала превышает ограничение размера. Для очистки содержимого я закрываю текущий FileOutputStream и создаю новый поток в режиме записи и закрываю его. Есть ли способ лучше сделать это:
public final void clearLog() throws IOException {
synchronized (this) {
FileOutputStream fos = null;
try {
// close the current log file stream
mFileOutputStream.close();
// create a stream in write mode
fos = mContext.openFileOutput(
LOG_FILE_NAME, Context.MODE_PRIVATE);
fos.close();
// create a new log file in append mode
createLogFile();
} catch (IOException ex) {
Log.e(THIS_FILE,
"Failed to clear log file:" + ex.getMessage());
} finally {
if (fos != null) {
fos.close();
}
}
}
}
3 ответа
Решение
Вы также можете перезаписать ваш файл ни с чем.
ОБНОВЛЕНИЕ:
Кажется, есть лучший вариант с getFilesDir () Посмотрите на этот вопрос Как удалить файл внутреннего хранилища в Android?
Запишите пустые данные в файл:
String string1 = "";
FileOutputStream fos ;
try {
fos = new FileOutputStream("/sdcard/filename.txt", false);
FileWriter fWriter;
try {
fWriter = new FileWriter(fos.getFD());
fWriter.write(string1);
fWriter.flush();
fWriter.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
fos.getFD().sync();
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
В этом коде:
fos = new FileOutputStream("/sdcard/filename.txt", false);
FALSE
- для написания нового контента. Если TRUE
- текст добавляется к существующему файлу.
public void writetofile(String text){ // text is a string to be saved
try {
FileOutputStream fileout=openFileOutput("mytextfile.txt", false); //false will set the append mode to false
OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
outputWriter.write(text);
outputWriter.close();
readfromfile();
Toast.makeText(getApplicationContext(), "file saved successfully",
Toast.LENGTH_LONG).show();
}catch (Exception e) {
e.printStackTrace();
}
}