Хранение файлов на Android, которые не удаляются при обновлении или удалении

Я хочу сохранить некоторые данные в файл (а не в базу данных) на устройстве Android. В настоящее время я использую Context.getFileDir() в качестве родительского каталога. Однако при обновлении приложения этот каталог удаляется. Есть ли каталог, который я могу использовать из контекста, который не будет взломан, когда пользователь обновит приложение? Должна ли это быть SD-карта, поскольку она не всегда доступна на всех телефонах?


person chubbsondubs    schedule 29.01.2011    source источник


Ответы (2)


Если вы хотите, чтобы файл не удалялся при удалении, это невозможно, поскольку вы, возможно, знаете, что удаление удалит все данные.

Хотя, если вы хотите сохранить файл при обновлении кода, вы можете использовать тот же метод, который вы используете, создавая файл на getFileDir();, просто вам нужно проверять каждый раз перед созданием файла, если файл уже существует или нет.

Если файл существует, нет необходимости создавать его снова, а если его нет, то создайте его.

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

if(f.exists()) //Where f is your file
{
    //Don't create the file, it already exists
}
else
{
    //Create the file, since it didn't exist
}
person chikka.anddev    schedule 29.01.2011

Однако, когда вы обновляете приложение, оно сразу удаляется.

Нет, это не так.

Есть ли каталог, который я могу использовать из контекста, который не будет взломан, когда пользователь обновит приложение?

Никакие файлы никогда не «взламываются, когда пользователь обновляет приложение».

Все файлы во встроенной флэш-памяти будут удалены, когда пользователь удалит приложение.

Должна ли это быть SD-карта, поскольку она не всегда доступна на всех телефонах?

Внешнее хранилище «обычно доступно» на всех устройствах Android, на которых есть Android Market. Он может быть недоступен в определенных обстоятельствах (например, он установлен на хост-компьютере, внешнее хранилище было съемным и фактически было удалено).

person CommonsWare    schedule 29.01.2011
comment
Этот ответ в основном правильный и отражает то, как Android должен работать, но на практике некоторые устройства, кажется, стирают данные как в частном хранилище, так и в общедоступном внешнем хранилище, скорее всего, из-за ошибочного программирования. или различные приложения-оптимизаторы. Просто то, о чем следует знать, и то, на что могут повлиять пользователи, установившие определенные приложения, или производитель, предварительно установивший приложения для очистки от нежелательной почты. - person Learn OpenGL ES; 06.09.2016