Я занимаюсь разработкой приложения, которое предъявляет некоторые особые требования, одно из которых состоит в том, чтобы регистрировать каждое отдельное действие, выполняемое в приложении:
- Действие, выполненное пользователем
- Записать действие с Timber
- Добавить эту строку к файлу журнала во внешнем хранилище устройства (устройстве хранения данных)
- Обновить копию этого файла на съемном внешнем хранилище (SD-карта)
Всякий раз, когда выполняется действие, я использую Timber.i("log message")
, и я переопределяю метод log(Int, String, String, Throwable)
там, где я делаю другие вещи:
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
if (priority == Log.INFO) {
appendToLog(message);
}
}
и appendToLog(String)
:
private fun appendToLog(message: String) {
// skipping the unnecessary code which transforms some info in a string, this works fine
val log = LogData(...)
// pathManager.getLogFile() returns a File and works
val fw = FileWriter(pathManager.getLogFile(),true)
// log.checksum() and log.encrypt() return a String, this works fine
val checksum = log.checksum()
val encrypted = log.encrypt()
fw.write(encrypted.plus("--!").plus(checksum))
fw.close()
// copying log file to sd
pathManager.getLogFile()
.copyTo(pathManager.getSdLogFile(), true) // the exception is thrown here
}
Выдается следующее исключение, другие юридические причины не могут быть добавлены другие детали, это все основные сведения об исключении
kotlin.io.FileAlreadyExistsException:
my/file/path -> my/file/path: The destination file already exists
Я прочитал здесь , что это исключение выбрасывается , только если целевой файл уже существует и если перезаписано false
, но я установил его как true
.
Кто-нибудь испытывал это? Как мне заставить его работать?
# Примечание:
Я знаю, что это может не соответствовать стандартам / рекомендациям Android, это не обычное приложение, а продукт, разработанный и разработанный для удовлетворения требований заказчика.