Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 14 дек 2018, 19:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Работа с файлами на Android
СообщениеДобавлено: 14 апр 2012, 19:05 

Зарегистрирован: 30 мар 2012, 09:54
Сообщений: 13
Откуда: Россия, респ. Мордовия, пгт. Торбеево
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Введение:

Для работы с файлами, не забудьте в AndroidManifest добавить строчку:
Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
С помощью нее, программа будет иметь разрешение работать с файлами на SD карте.

Полезности:
Как получить путь к SD карте:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
  2. if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) // если true
  3. File sdDir = android.os.Environment.getExternalStorageDirectory();
или
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
  2. if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) // если true
  3. String folder = Environment.getExternalStorageDirectory().toString();



Создание папки:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public static  void createDir(String folder) {
  2.                 File f1 = new File(folder); //Создаем файловую переменную
  3.                 if (!f1.exists()) { //Если папка не существует
  4.                         f1.mkdirs()  //создаем её
  5.                 }
  6.         }


Копирование файла или директории:
from - путь к файлу/директории, который(-ое) мы будем копировать, to - путь к файлу/директории, куда мы будем копировать
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public static boolean copy(String from, String to) {
  2. try {      
  3.                 File fFrom = new File(from);
  4.                 if (fFrom.isDirectory()) { // Если директория, копируем все ее содержимое
  5.                         createDir(to);
  6.                         String[] FilesList = fFrom.list();
  7.                         for (int i = 0; i <= FilesList.length; i++)
  8.                                 if (!copy(from + "/" + FilesList[i], to + "/" + FilesList[i]))
  9.                                         return false; // Если при копировании произошла ошибка
  10.                 } else if (fFrom.isFile()) { // Если файл просто копируем его
  11.                         File fTo = new File(to);
  12.                         InputStream in = new FileInputStream(fFrom); // Создаем потоки
  13.                         OutputStream out = new FileOutputStream(fTo);
  14.                         byte[] buf = new byte[1024];
  15.                         int len;
  16.                         while ((len = in.read(buf)) > 0) {
  17.                                 out.write(buf, 0, len);
  18.                         }
  19.                         in.close(); // Закрываем потоки
  20.                         out.close();
  21.                 }
  22.         } catch (FileNotFoundException ex) { // Обработка ошибок
  23.         } catch (IOException e) { // Обработка ошибок
  24.         }
  25.         return true; // При удачной операции возвращаем true
  26. }
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. //например:
  2. copy("/mnt/sdcard/folder1/a.apk","/mnt/sdcard/folder2/a.apk");
  3. //или
  4. copy("/mnt/sdcard/folder1","/mnt/sdcard/folder2");
  5. //Внимание! именно так, без знака "/"  в конце!


Удаление файла или директории:
path - путь к файлу или директории, который(-ую) необходимо удалить
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public static void delete(String path) {
  2.                 File file = new File(path); //Создаем файловую переменную
  3.                 if (file.exists()) { //Если файл или директория существует
  4.                         String deleteCmd = "rm -r " + path; //Создаем текстовую командную строку
  5.                         Runtime runtime = Runtime.getRuntime();  
  6.                         try {
  7.                                 runtime.exec(deleteCmd); //Выполняем системные команды
  8.                         } catch (IOException e) {
  9.                         }
  10.                 }
  11.         }
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. //например:
  2. delete("/mnt/sdcard/a.apk")
  3. //или
  4. delete("/mnt/sdcard/folder")


Перемещение файла или директории:
Перемещение файла, я осуществляю объединением команд копирования файла и его удаления:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. private boolean move(String from,String to) {
  2. try {      
  3.                 File fFrom = new File(from);
  4.                 if (fFrom.isDirectory()) { // Если директория, копируем все ее содержимое
  5.                         createDir(to);
  6.                         String[] FilesList = fFrom.list();
  7.                         for (int i = 0; i <= FilesList.length; i++)
  8.                                 if (!copy(from + "/" + FilesList[i], to + "/" + FilesList[i]))
  9.                                         return false; // Если при копировании произошла ошибка
  10.                 } else if (fFrom.isFile()) { // Если файл просто копируем его
  11.                         File fTo = new File(to);
  12.                         InputStream in = new FileInputStream(fFrom); // Создаем потоки
  13.                         OutputStream out = new FileOutputStream(fTo);
  14.                         byte[] buf = new byte[1024];
  15.                         int len;
  16.                         while ((len = in.read(buf)) > 0) {
  17.                                 out.write(buf, 0, len);
  18.                         }
  19.                         in.close(); // Закрываем потоки
  20.                         out.close();
  21.                 }
  22.         } catch (FileNotFoundException ex) { // Обработка ошибок
  23.         } catch (IOException e) { // Обработка ошибок
  24.         }
  25. String deleteCmd = "rm -r " + from; //Создаем текстовую командную строку в которой удаляем начальный файл
  26.                         Runtime runtime = Runtime.getRuntime();  
  27.                                 runtime.exec(deleteCmd); //Выполняем удаление с помощью команд
  28.         return true; // При удачной операции возвращаем true
  29.         }
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. //пример:
  2. move("/mnt/sdcard/folder1/a.apk","/mnt/sdcard/folder2/a.apk")


Старался написать понятно, если что, в своих сообщениях дополняйте написанную мною информацию, или пишите замечания.

Спасибо: KamiSempai


Последний раз редактировалось SKR 24 апр 2012, 08:59, всего редактировалось 12 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 10:19 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Все замечательно, только не хватает процедуры копирования директории. Думаю она должна выглядеть примерно так:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public static boolean copy(String from, String to) {
  2.         try {
  3.                 File fFrom = new File(from);
  4.                 if (fFrom.isDirectory()) { // Если директория, копируем все ее содержимое
  5.                         createDir(to);
  6.                         String[] FilesList = fFrom.list();
  7.                         for (int i = 0; i <= FilesList.length; i++)
  8.                                 if (!copy(from + "/" + FilesList[i], to + "/" + FilesList[i]))
  9.                                         return false; // Если при копировании произошла ошибка
  10.                 } else if (fFrom.isFile()) { // Если файл просто копируем его
  11.                         File fTo = new File(to);
  12.                         InputStream in = new FileInputStream(fFrom); // Создаем потоки
  13.                         OutputStream out = new FileOutputStream(fTo);
  14.                         byte[] buf = new byte[1024];
  15.                         int len;
  16.                         while ((len = in.read(buf)) > 0) {
  17.                                 out.write(buf, 0, len);
  18.                         }
  19.                         in.close(); // Закрываем потоки
  20.                         out.close();
  21.                 }
  22.         } catch (FileNotFoundException ex) { // Обработка ошибок
  23.         } catch (IOException e) { // Обработка ошибок
  24.         }
  25.         return true; // При удачной операции возвращаем true
  26. }

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 10:20 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Отличный мануал, урок про работу с файлами теперь можно не писать :)

Можно еще дополнить и написать, как получить путь для работы с внешним накопителем (SD).

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 13:24 

Зарегистрирован: 30 мар 2012, 09:54
Сообщений: 13
Откуда: Россия, респ. Мордовия, пгт. Торбеево
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
KamiSempai, damager82, спасибо, добавил.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 13:48 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
SKR писал(а):
KamiSempai, damager82, спасибо, добавил.
В личном сообщении написал кое какие замечания, обязательно прочитайте.
И если уж на то пошло, можно доработать метод move так же как и copy, используя delete(String path) из этого набора.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 16:52 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Непонятно что такое sdState. Environment.getExternalStorageState() имеется ввиду?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 16 апр 2012, 17:19 

Зарегистрирован: 30 мар 2012, 09:54
Сообщений: 13
Откуда: Россия, респ. Мордовия, пгт. Торбеево
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
damager82 писал(а):
Непонятно что такое sdState. Environment.getExternalStorageState() имеется ввиду?

Упс, упустил :oops:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 20 апр 2012, 15:38 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Я добавил ссылку на эту ветку в будущий урок №75 про работу с файлами, который выйдет 03.05.12. Думаю, многих заинтересует.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 20 апр 2012, 21:17 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Только нужно будет ошибки кое-какие исправить.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 23 апр 2012, 09:57 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
KamiSempai писал(а):
Только нужно будет ошибки кое-какие исправить.

Что там за ошибки?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 23 апр 2012, 12:38 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Большая часть уже исправлена. Но, например, в примере по использованию копирования, путь к папке указывается с символом "/" в конце, а в цикле, при копировании содержимого, мы добавим еще один такой символ. В итоге получим "//".
С перемещением все вроде бы нормально, будет работать, но в цикле не исправлен "copy" на "move". Конечно, все зависит от того как нам нужно произвести перемещение, по частям или скопировать а потом удалить.

Если нужен вариант с удалением только после полного копирования, можно было сделать на много проще:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. private boolean move(String from,String to) {
  2.         if(copy(from,to))
  3.                 delete(from) // При удачном копировании удаляем скопированную папку
  4.         else {
  5.                // При НЕ удачном копировании можно что то сделать...
  6.         };
  7. }
Однако, при таком перемещении шанс наткнуться на нехватку памяти больше.

И еще в том-же самом перемещении при удалении отсутствуют проверки на возникновение ошибки.

PS: Я, конечно, понимаю, что для понимания принципов работы с файлами выше перечисленного достаточно, но большинство, скорее всего, просто скопирует кусок кода и вставит в свою программу. Итог - программа работающая лишь в условиях сферического вакуума.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 24 апр 2012, 08:51 

Зарегистрирован: 30 мар 2012, 09:54
Сообщений: 13
Откуда: Россия, респ. Мордовия, пгт. Торбеево
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
KamiSempai, насчет знака "/" добавил комментарий, а насчет процедуры Move не согласен, так как лишние процедуры в программе не нужны, если программисту не требуется копировать или удалять файлы, а только перемещать. Ну а насчет проверок на ошибки, пускай каждый сам решает, нужно ему это или нет, моей целью было систематизировать информацию, не более :)
А вот про замену copy на move, я не понимаю, о чем вы. Я только учусь программировать на java, так сказать, и про нехватку памяти не беспокоюсь, пока все работает :mrgreen:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 24 апр 2012, 09:41 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
С этим не поспоришь, каждый сам выбирает как ему удобнее писать.

По поводу:
SKR писал(а):
А вот про замену copy на move, я не понимаю, о чем вы.

Отвечаю :)
SKR писал(а):
... так как лишние процедуры в программе не нужны, если программисту не требуется копировать или...

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 31 июл 2012, 14:16 

Зарегистрирован: 11 июл 2012, 10:28
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А когда просто создаешь файл, по какому пути он создается?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 31 июл 2012, 15:27 
Аватар пользователя

Зарегистрирован: 16 июл 2012, 21:37
Сообщений: 439
Благодарил (а): 0 раз.
Поблагодарили: 27 раз.
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно


воо6ще-то getExternalStorageState() возвращает не boolean а String. Одну из констант

и воо6ще эту конструкцию
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
  2. if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) // если true
  3. File sdDir = android.os.Environment.getExternalStorageDirectory();

можно записать так
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) // если true
  2. File sdDir = Environment.getExternalStorageDirectory();

Заранее спаси6о

_________________
CEO of a company R.id.team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 09 авг 2012, 12:35 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Не понял пример с удалением...что за делиты потом написаны, после основного кода??


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 10 авг 2012, 10:42 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
powercat писал(а):
Не понял пример с удалением...что за делиты потом написаны, после основного кода??

Пара delete? Это примеры использования.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 10 авг 2012, 11:22 
Аватар пользователя

Зарегистрирован: 20 июл 2012, 11:31
Сообщений: 508
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Данкс


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 18 ноя 2012, 22:10 

Зарегистрирован: 18 ноя 2012, 20:13
Сообщений: 1
Откуда: г. Ульяновск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Доброго времени суток!
Подскажите, пожалуйста, как просмотреть все файлы поочередно в отдельной директории на SD карте? То есть существует папка, в ней изображения, названия точно не известны. И уже по ним надо пробежаться, выполняя определенные действия.
Заранее спасибо =)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами на Android
СообщениеДобавлено: 18 ноя 2012, 22:47 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. File dir = new File("sdcard\\mydir\\");
  2. for(File file : dir.listFiles()) {
  3. if(file.isFile())
  4. //работаем с файлом и т.д.
  5. }

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB