Урок 75. Хранение данных. Работа с файлами.

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Foenix » 19 фев 2015, 23:26

:lol:
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение AlexeyFedor » 01 мар 2015, 12:14

Самодельный File Explorer.
Есть Активити1 при нажатии на кнопку, переходим в Активити2.
Активити2 представляет из себя проводник, но показывает пользователю только файлы картинок. В Активити2 выбираем нужный файл, и возвращаем его полный путь через интент в Активити1, по клику на файле ну или фиг с ним по клику на кнопочке Ок.
Очень хочется написать самостоятельно для практики и расширения кругозора. Подскажите с чего начать. Букварь и таблицу умножения не предлагать уже читал, почти все понял.

Ленивенко
Сообщения: 8
Зарегистрирован: 10 мар 2015, 11:57

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Ленивенко » 21 мар 2015, 14:44

Добрый день. Подключил к компьютеру планшет, но папка data не отрывается. На эмуляторе все норм.
Я так понимаю нужны Root права или в Eclips нужно изменить какие то настройки?

Joni
Сообщения: 2
Зарегистрирован: 22 мар 2015, 15:04

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Joni » 22 мар 2015, 15:18

А как создать файл на флешке в Android 4.4.4 API19 ?

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение AlexeyFedor » 22 мар 2015, 15:52

Joni писал(а):А как создать файл на флешке в Android 4.4.4 API19 ?
Вопрос не понятен. Возможно вы имели в виду вот это viewtopic.php?f=26&t=5668

Joni
Сообщения: 2
Зарегистрирован: 22 мар 2015, 15:04

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Joni » 22 мар 2015, 17:47

в эмуляторе файл на SD-карте создается, а на реальном устройстве нет
изначально думал, что это из-за Andriod 4.4, добился того, что в эмуляторе на этой версии андройда начал создаваться файл.
закинул приложение на планшет и опять не работает(((
стал разбираться более подробно, оказалось, что на планшете установлен Андройд не 4.4, а 4.2
наконец разобрался!
нужно сделать так
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ser.myapplication" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение klblk » 23 мар 2015, 08:05

Joni писал(а):в эмуляторе файл на SD-карте создается, а на реальном устройстве нет
изначально думал, что это из-за Andriod 4.4, добился того, что в эмуляторе на этой версии андройда начал создаваться файл.
закинул приложение на планшет и опять не работает(((
стал разбираться более подробно, оказалось, что на планшете установлен Андройд не 4.4, а 4.2
наконец разобрался!
нужно сделать так
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
В уроке про это сказано:
Осталось в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE.
Но на 4.4 записать файл в любую директорию не получится, только в папку приложения. В Android 5 вроде бы ввели API для работы с файлами на sd.

Pavel-Pugach
Сообщения: 15
Зарегистрирован: 31 мар 2015, 15:17

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Pavel-Pugach » 09 апр 2015, 21:50

Зачем в методе void writeFileSD() мы опять создаем директорию и тд? Обычно мы подключаем считывающий поток уже к существующему файлу, т.е должен уже быть готовый путь, который мы и вставим в конструктор new File("тут будет путь");

Или я чего то не понял?

lexx
Сообщения: 4
Зарегистрирован: 10 май 2015, 23:55

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение lexx » 10 май 2015, 23:58

Все таки почему в примере не закрывается поток чтения?

xfn
Сообщения: 10
Зарегистрирован: 23 июл 2015, 14:54

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение xfn » 20 авг 2015, 22:55

MODE_APPEND = 0×00008000 : сообщает о том, что если файл существует, то не нужно затирать содержимое, а дописывать в конец;
MODE_PRIVATE = 0×00000000 : говорит о том, что доступ к файлу будет только у приложения, которое его создало;

- а можно как-то совместить это? Или при создании файла по умолчанию создается приват, а при указании аппенд дописывается с текущими правами?

Аватара пользователя
Kirill
Сообщения: 19
Зарегистрирован: 09 сен 2015, 13:53

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Kirill » 12 сен 2015, 15:35

я нашел баг в android studio :geek:

Все началось с того что я не мог записать файл в external storage directory. Разрешения в манифесте естественно прописал. Ни смотря на это в дебаг режиме все равно столкнулся с исключением из-за отсутствия разрешения на запись.
В итоге оказалось что в манифесте было прописано следущее:
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/>

вместо

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

имя пакета android.permission был написан заглавными буквами из-за чего разрешение не срабатывало (но и нигде ошибки не выдавало!)

теперь суть бага в android studio:
чтобы написать строку с пермишеном мы пишем следующее:
1. и нажимаем Enter для автодополнения
2. нам дополняют строку до ткого вида:

Код: Выделить всё

<uses-permission android:name=""
и курсор ставит между двойными кавычками чтобы сразу начать вводить вид разрешения.
3. И вот здесь если мы начинаем сразу писать

Код: Выделить всё

WRITE_EX
в подсказке появляется единственный вариант

Код: Выделить всё

android.permission.WRITE_EXTERNAL_STORAGE 
и если мы в этот момент нажмем Enter то автодополнение вставит все заглавными буквами!
в таком виде:

Код: Выделить всё

<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE" 
и все. Закрываем тег и думаем что все хорошо. А оно не работает. Собака.

Версия Android Studio 1.3.1, Windows 8.1

кстати, если на шаге 3 начинать писать имя пермишена с самого начала, то есть со слов android.permissi... и дойти до WRITE_EX и нажать Enter - тогда автодополнение вставит правильного вида строку со словами android.permissions в нижнем регистре.

Аватара пользователя
Kirill
Сообщения: 19
Зарегистрирован: 09 сен 2015, 13:53

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Kirill » 14 сен 2015, 12:22

Этот баг уже заведен https://code.google.com/p/android/issue ... ?id=157123 обещали пофиксить в версии 1.4

Детёныш
Сообщения: 1
Зарегистрирован: 08 ноя 2015, 02:18

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Детёныш » 08 ноя 2015, 02:25

Добрый день. Подскажите, пожалуйста. У меня есть метод для чтения данных из текстового файла, который находится в папке res/raw/. Каким тогда должен быть метод для записи данных в этот файл из массива? Вот код:

Код: Выделить всё

//---Метод для чтения данных из файла
    public void LoadText(int resourceId,ArrayList<String> arr) {
        // The InputStream opens the resourceId and sends it to the buffer
        InputStream is = this.getResources().openRawResource(resourceId);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String readLine = null;

        try {
            // While the BufferedReader readLine is not null
            while ((readLine = br.readLine()) != null) {
                //Log.d("TEXT", readLine);
                arr.add(readLine);
            }

            // Close the InputStream and BufferedReader
            is.close();
            br.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

nikola240698
Сообщения: 5
Зарегистрирован: 18 янв 2016, 21:29

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение nikola240698 » 28 янв 2016, 20:00

У меня такой вопрос: Как построчно считать файл, для того чтобы заполнить отдельные View компоненты отдельными строками? Или же есть другой способ получше?

cintakc
Сообщения: 3
Зарегистрирован: 16 янв 2016, 18:46

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение cintakc » 06 июн 2016, 18:42

Код: Выделить всё

openFileOutput(FILENAME, MODE_PRIVATE);
возникла проблема, на эмуляторе с андроид 4.3 все работает, а на андроид 6.0 не хочет
пробовал на SD писать .txt файл, тоже не хочет

Pandroid
Сообщения: 1
Зарегистрирован: 16 июн 2016, 16:02

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Pandroid » 16 июн 2016, 16:18

Пытаюсь на андроид-клиенте получить от веб-сервиса 1с файл XML. Взаимодействие осуществляется с помощью ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar.
Т.е. из андроид вызывается функция веб-сервиса, которая формирует файл XML и возвращает его на клиент в виде двоичных данных. Как правильно обработать этот файл на клиенте? Нужно ли сначала сохранить двоичные данные как файл XML или можно сразу обработать?

ok21
Сообщения: 1
Зарегистрирован: 09 июл 2016, 18:04

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение ok21 » 09 июл 2016, 18:31

Решил посмотреть в дебаггере код из WriteSD. Что увидел, докладываю -
- сначала без смартфона, как и ожидал программа вылетела по catch (IOException e) {e.printStackTrace();}.
полагаю потому как какая SD в эмуляторе.
-далее загрузил программу в смартфон. sdPath при этом сформировался такой -
storage/emulated/0/myfiles. При дебагировании опять вылетел там же по catch (IOException e) {e.printStackTrace();}.
Хорошо, решил прорваться дальше - посмотрел на смартфоне реальный путь выглядит следующим образом-
storage/F03F-130C/Android/data/com.exampe......(и т.д. включая имя пути, в котором хранится приложение на компьютере).
Установил sdPath на это значение - работает.
Возможно, что после нормальной инсталляции sdPath = "storage/emulated/0/myfiles".
Но для дебагирования пришлось назначить путь вручную. Как-то кривовато, как мне кажется. Или что-то я недопонял.
Попытаюсь понять из Ваших разъяснений, за которые заранее спасибо.
P.S. Поскольку работал с API level 23 permission.WRITE_EXTERNAL_STORAGE в манифесте не указывал, т.к. начиная с level 19 в этом нет надобности.

Serega_Alfach
Сообщения: 5
Зарегистрирован: 13 авг 2016, 17:54

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Serega_Alfach » 18 сен 2016, 21:54

Доброго времени суток, столкнулся с проблемой, что метод writeFile() и writeFileSD() создают файлы "file" и "папку Myfiles с файлом fileSD" там, где по умолчанию в настройках стоит путь сохранения файлов. Если стоит память телефона, всё сохраняет туда, если Sd-card, всё на флешку. Тестировал на реальном устройстве Android 4.4.2. Скажите, так и должно быть? Код MainActivity.java копипастеный с урока. "<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>" - есть.

Qelit
Сообщения: 1
Зарегистрирован: 30 янв 2017, 15:17

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Qelit » 24 фев 2017, 13:53

2 дня сидел над вопросом о нахождении директории с внешней SD картой. File sdFile = new File(getExternalFilesDir(null), FILENAME_SD); - вот ответ.
Проверил, всё работает. Лишние 3 строки кода убрать.

zts
Сообщения: 2
Зарегистрирован: 18 окт 2019, 15:30

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение zts » 23 окт 2019, 23:50

Kirill писал(а):
12 сен 2015, 15:35
я нашел баг в android studio :geek:
Все началось с того что я не мог записать файл в external storage directory. Разрешения в манифесте естественно прописал.
...
автодополнение вставит все заглавными буквами!
в таком виде:

Код: Выделить всё

<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE" 
и все. Закрываем тег и думаем что все хорошо. А оно не работает. Собака.
На реальном устройстве с Android 6.0 и выше даже при
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
не удается записывать файл.
Environment.getExternalStorageState() выдает четкое Environment.MEDIA_MOUNTED, но файл не записывается, потому что на устройстве надо вручную дать разрешение на запись (Settings->Apps-> P0751_Files-> Permissions->Storage->On).Поэтому в MainActivity надо прописать:

Код: Выделить всё

  97       // создаем каталог
  98       sdPath.mkdirs();
            if(!sdPath.canWrite()){
                       Log.d(LOG_TAG, "нет разрешения на запись CD");
                       Toast.makeText(this,"нет разрешения на запись CD",Toast.LENGTH_LONG).show();
                       return;
            }
  99       // формируем объект File, который содержит путь к файлу
 100      File sdFile = new File(sdPath, FILENAME_SD);
  

Ответить