- Работа с файловой системой
- Чтение и сохранение файлов
- Правильная работа с файлами в Android
- Сохранение файлов вместо внутренней памяти на SD-карту
- Как включить sd карту на Андроиде
- Видео инструкция! (если нет времени читать)
- Автоматическое сохранение файлов на карту памяти
- Меняем папку сохранения в браузере
- Если у вас телефон Samsung (с Android 9 и выше)
- Перенос файлов на sd карту
- Объединение карты памяти со внутренней
- Способ 1
- Способ 2
- Меняем местами внутреннюю память с sd картой
Работа с файловой системой
Чтение и сохранение файлов
Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.
ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».
Приложение Android сохраняет свои данные в каталоге /data/data/ / и, как правило, относительно этого каталога будет идти работа.
Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:
boolean deleteFile (String name) : удаляет определенный файл
String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
FileInputStream openFileInput(String filename) : открывает файл для чтения
FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи
Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.
Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.
Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:
Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.
Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:
При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE
Система позволяет создавать файлы с двумя разными режимами:
MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
MODE_APPEND : данные могут быть добавлены в конец файла
Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:
Для чтения файла применяется поток ввода FileInputStream :
Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php
В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt
Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer
После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.
Источник
Правильная работа с файлами в Android
Сегодня я бы хотел рассказать вам о правильной работе с файлами в ОС Android. Итак, чаще всего у новичков возникают ситуации, когда обычные Java функции не могут корректно создать тот или иной файл в системе Android.
Во-первых, вам нужно обратить внимание на интересную особенность ОС:
когда вы устанавливаете apk приложение в эмулятор или телефон, система Linux (на которой базируется ядро Android) выделяет ему специальный User-ID, который является неким ключом доступа к (sandbox). То есть другие приложения в телефоне не смогут получить доступ к чтению файлов вашего приложения просто так. Кончено, всё это сделано в целях безопасности.
В общем, если вы запустите следующий код:
FileWriter f = new FileWriter(«impossible.txt»);
То этот код вызовет исключение: ‘java.io.FileNotFoundException: /impossible.txt ‘
Тогда как должен в случае отсутствия файла создать его.
Далее стоит отметить, что данное ограничение не распространяется на файлы, записываемые на SDCard. Туда можно писать любые файлы без всяких проблем, правда предварительно нужно добавить в AndroidManifest разрешение на запись:
Код файла на карту:
File fileName = null;
String sdState = android.os.Environment.getExternalStorageState();
if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) <
File sdDir = android.os.Environment.getExternalStorageDirectory();
fileName = new File(sdDir, «cache/primer.txt»);
> else <
fileName = context.getCacheDir();
>
if (!fileName.exists())
fileName.mkdirs();
try <
FileWriter f = new FileWriter(fileName);
f.write(«hello world»);
f.flush();
f.close();
> catch (Exception e) <
>
Как уже ранее было сказано мною, android приложение находится в некой песочнице, изолированной от воздействия со стороны других приложений по умолчанию. Для того, чтобы создать файл внутри этой песочницы, следует использовать функцию openFileOutput(). Хочу отметить 2 аргумента:
1. имя файла
2. режим доступа к нему со стороны чужих приложений
С первым аргументом все ясно, что касается второго, то режимов существует два: MODE_WORLD_READABLE и/или MODE_WORLD_WRITEABLE.
И ещё, чтобы записать файл можно использовать следующий код:
final String TESTSTRING = new String(«Hello Android»);
FileOutputStream fOut = openFileOutput(«samplefile.txt», MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
// записываем строку в файл
osw.write(TESTSTRING);
/* проверяем, что все действительно записалось и закрываем файл */
osw.flush();
osw.close();
Для чтения файлов используется метод openFileInput():
FileInputStream fIn = openFileInput(«samplefile.txt»);
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[TESTSTRING.length()];
isr.read(inputBuffer);
String readString = new String(inputBuffer);
Для удаления используется метод deleteFile() в контексте приложения/активити. На этом я бы хотел закончить полезный пост, спасибо за внимание!
Источник
Сохранение файлов вместо внутренней памяти на SD-карту
Илья – главный редактор сайта softdroid.net. Является автором нескольких сотен руководств и статей по настройке Android. Около 15 лет занимается ремонтом техники и решением технических проблем iOS и Android. Имел дело практически со всеми более-менее популярными марками мобильных смартфонов и планшетов Samsung, HTC, Xiaomi и др. Для тестирования используется iPhone 12 и Samsung Galaxy S21 с последней версией прошивки.
Операционная система занимает значительную часть внутренней памяти смартфона. Проходит не так много времени с момента покупки телефона, память заполняется, и вопрос удаления посторонних файлов начинает беспокоить. Даже после установки sd карты в телефон проблема не всегда решается – пользователи не знают, как изменить место сохранения файлов. Эту проблему мы сейчас и устраним.
Содержание:
Как включить sd карту на Андроиде
Несмотря на очевидность, не все пользователи умеют подключать карту памяти к телефону. Рассмотрим, как это сделать.
- Если флеш-карта еще не установлена в слот телефона, сделайте это.
- После этого, на экране устройства появится сообщение “SD карта готова. Изменить память для записи по умолчанию?».
- Нажмите «Да», изменения вступят в силу.
- Если никакого сообщения нет, внесите изменения в разделе «Память»
- Как вариант – смахните шторку в верхней части экрана вниз и тапните на появившееся сообщение.
После выполнения этой инструкции вы можете скачать на карту памяти любые файлы.
Видео инструкция! (если нет времени читать)
Автоматическое сохранение файлов на карту памяти
Чтобы скачиваемые из интернета файлы помещались сразу на карту памяти, нужно зайти в настройки телефона и изменить место их сохранения. Инструкция должна сработать независимо от установленной версии ОС Андроид.
- Зайдите в «Настройки» и выберите раздел «Память»;
- В верхней части окна обратите внимание на пункт «Сохранить данные по умолчанию»;
- Поставьте галочку напротив надписи «SD-карта».
- Место загрузки будет изменено.
Путь к настройкам сохранения может отличаться. В других версиях операционной системы будет подпункт «Настройки памяти» (или подобный), а в нем – «Место сохранения по умолчанию». Тапните на него и выберите «SD-карта».
Если этот способ не помог, используйте поочередно те, что описаны далее. Помните, что ни один вариант не сработает, если вы не установили SD-карту и при этом пытаетесь изменить настройки.
Меняем папку сохранения в браузере
Для выхода в интернет используется браузер, и большинство файлов загружается на телефон через него. Чтобы данные скачивались на карту памяти можно настроить его так, чтобы перед закачкой он запрашивал место сохранения. Рассмотрим изменение пути сохранения на примере Google Chrome.
- Запустите браузер Chrome;
- В меню (3 вертикальные точки) перейдите в «Настройки»;
- Прокрутите страницу вниз, выберите «Скачанные файлы».
- Напротив строки «Спрашивать, куда сохранять файлы» переместите ползунок вправо.
- Попасть в этот раздел можно по-другому — в меню выбрать пункт «Скачанные файлы», а уже оттуда перейти в «Настройки» и переместить ползунок.
Если у вас телефон Samsung (с Android 9 и выше)
Владельцам смартфонов Самсунг изменить место сохранения файлов проще простого. Настройки изменяются через стандартный браузер, установленный на телефоне по умолчанию (обычно это Chrome). Действия:
- Зайдите в меню телефона и найдите классический браузер (название «Интернет»);
- Щелкните на 3 вертикальные кнопки в правом верхнем углу и перейдите в меню;
- Щелкните «Настройки» >Веб-сайты и загрузки;
- Выберите “Место сохранения файлов”;
- Выберите «Карта памяти».
- С этого момента все загрузки будут автоматически помещаться на sd карту.
Если у вас Samsung Galaxy, но способ не сработал, это может быть связано с тем, что:
- вы используете не штатный браузер,
- в телефоне нет sd карты,
- у вас не оригинальный телефон Samsung, а фейк.
Перенос файлов на sd карту
Чтобы освободить пространство, перенесите данные с внутренней памяти на флешку. Для этого
- зайдите в папку «Файлы»
- выберите интересующую подпапку (фото, видео, документы и т. д.).
- Нажмите на файл и удерживайте палец в течение секунды, пока он не выделится.
- Отметьте поочередно все фото/видео/аудио, которые хотите перенести в другое место или нажмите «Выбрать все», если есть такой пункт.
- Нажмите кнопку «Переместить».
- В новом окне выберите «Карта памяти», а после — конкретную папку.
- Подождите, пока закончится перенос данных.
- Аналогично повторите процедуру с остальной информацией.
Объединение карты памяти со внутренней
Есть отличный способ сделать так, чтобы местная память телефона на андроид расширилась за счет карты памяти. Другими словами она будет объединена, и необходимость постоянно менять место сохранения исчезнет.
Способ 1
- Зайдите в «Настройки» и выберите раздел «Память»;
- В разделе «Настройки памяти» поставьте галочку напротив надписи «SD-карта».
- Появится сообщение следующего содержания: «Телефон зашифрован. Перед изменением места сохранения убедитесь, что новое место безопасно».
- Проверьте карту на вирусы, если не уверены, затем нажмите «ОК».
- Если карта не особо вместительная, появится дополнительное сообщение: «У установленной карты малый объем памяти. Переключение не рекомендуется. Переключить?». Сделайте это или замените карту на более вместительную.
- После это появится еще одно сообщение «…При переключении может произойти потеря данных, телефон перезагрузится, для вступления изменений в силу…». Нажмите «Продолжить»
- Дождитесь, пока телефон перезапустится.
После включения смартфона, объем внутренней памяти будет увеличен на «размер» SD-карты, а файлы начнут сохраняться на нее. Аналогичным образом – с перезагрузкой телефона, все возвращается обратно.
Способ 2
- Перейдите в «Настройки» > «Накопители» (если он имеется);
- Щелкните по кнопке «Micro SD». Зайдите в меню (3 вертикальные точки);
- Повторно нажмите на «Накопители»;
- Отметьте «Подключить к внутренней памяти».
- На следующей странице очистите и отформатируйте карту памяти.
- Дождитесь окончания процесса
- Перенесите нужные данные на Micro SD, если в этом есть необходимость. Все скачиваемые после этого файлы будут размещаться на ней.
Меняем местами внутреннюю память с sd картой
После нижеописанных действий телефон будет считать SD-карту внутренней памятью Android. Все файлы (включая приложения) будут устанавливаться на нее. Порядок действий:
- Установите программу Total Commander и предоставьте ей права суперпользователя после запуска;
- Перейдите в Корень файловой системы;
- Откройте папку «ETC» и найдите там раздел «vold.fstab». Тапните по нему и нажмите «Редактировать».
- Найдите строчки «dev_mount»… и символы sdcard и extsd в конце поменяйте снизу-вверх и наоборот.
- Сохраните изменения, перезагрузите смартфон.
Источник