Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 195
Завершенные тесты: 1
#1

Чтение и запись xml файла на SD-карту - Android

06.11.2015, 00:39. Просмотров 385. Ответов 3
Метки нет (Все метки)

Мне нужно из БД сохранять определенную информацию в файл (это будет инфа пользователя), а потом загружать при необходимости. И таких файлов может быть несколько.
По отдельности я нашел эти действия. Запись файла на SD:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    void writeFileSD() {
        // проверяем доступность SD
        if (!Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            Log.d(LOG_TAG, "SD-карта не доступна: " + Environment.getExternalStorageState());
            return;
        }
        // получаем путь к SD
        File sdPath = Environment.getExternalStorageDirectory();
        // добавляем свой каталог к пути
        sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
        // создаем каталог
        sdPath.mkdirs();
        // формируем объект File, который содержит путь к файлу
        File sdFile = new File(sdPath, FILENAME_SD);
        try {
            // открываем поток для записи
            BufferedWriter bw = new BufferedWriter(new FileWriter(sdFile));
            // пишем данные
            bw.write("Содержимое файла на SD");
            // закрываем поток
            bw.close();
            Log.d(LOG_TAG, "Файл записан на SD: " + sdFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

чтение файла с SD:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    void readFileSD() {
        // проверяем доступность SD
        if (!Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            Log.d(LOG_TAG, "SD-карта не доступна: " + Environment.getExternalStorageState());
            return;
        }
        // получаем путь к SD
        File sdPath = Environment.getExternalStorageDirectory();
        // добавляем свой каталог к пути
        sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
        // формируем объект File, который содержит путь к файлу
        File sdFile = new File(sdPath, FILENAME_SD);
        try {
            // открываем поток для чтения
            BufferedReader br = new BufferedReader(new FileReader(sdFile));
            String str = "";
            // читаем содержимое
            while ((str = br.readLine()) != null) {
                Log.d(LOG_TAG, str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Парсинг xml файла находящегося в ресурсах (/res/xml/data.xml):
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class MainActivity extends Activity {
 
  final String LOG_TAG = "myLogs";
 
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String tmp = "";
 
    try {
      XmlPullParser xpp = prepareXpp();
 
      while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
        switch (xpp.getEventType()) {
        // начало документа
        case XmlPullParser.START_DOCUMENT:
          Log.d(LOG_TAG, "START_DOCUMENT");
          break;
        // начало тэга
        case XmlPullParser.START_TAG:
          Log.d(LOG_TAG, "START_TAG: name = " + xpp.getName()
              + ", depth = " + xpp.getDepth() + ", attrCount = "
              + xpp.getAttributeCount());
          tmp = "";
          for (int i = 0; i < xpp.getAttributeCount(); i++) {
            tmp = tmp + xpp.getAttributeName(i) + " = "
                + xpp.getAttributeValue(i) + ", ";
          }
          if (!TextUtils.isEmpty(tmp))
            Log.d(LOG_TAG, "Attributes: " + tmp);
          break;
        // конец тэга
        case XmlPullParser.END_TAG:
          Log.d(LOG_TAG, "END_TAG: name = " + xpp.getName());
          break;
        // содержимое тэга
        case XmlPullParser.TEXT:
          Log.d(LOG_TAG, "text = " + xpp.getText());
          break;
 
        default:
          break;
        }
        // следующий элемент
        xpp.next();
      }
      Log.d(LOG_TAG, "END_DOCUMENT");
 
    } catch (XmlPullParserException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  XmlPullParser prepareXpp() {
    return getResources().getXml(R.xml.data);
  }
}

А вот как соединить эти действия пока не понял.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2015, 00:39     Чтение и запись xml файла на SD-карту
Посмотрите здесь:

Запись XML из сети в TextView Android
Чтение из файла Android
Чтение XML Android
Чтение и запись JSON файла Android
AsyncTask и чтение XML Android
Подскажите лучший способ хранения данных, чтение/запись файлов Android
Android RSS парсер, чтение и последующая запись в объект не осуществляются
Android Чтение из файла в строку
Android Запись и чтение класса в файл
Android Чтение текстового файла
Чтение и запись внешних файлов Android
Чтение и запись данных в локальную БД SQLite Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
06.11.2015, 02:09     Чтение и запись xml файла на SD-карту #2
Worldmen, а зачем именно xml? Можно сделать проще. Добавляешь в проект библиотеку GSON. Делаешь класс в котором будет находится "инфа пользователя". создаёшь объект и заполняешь его информацией.
Java
1
2
3
4
5
6
public class UserData {
      public String userName;
      public int userAge;
      public String userData;
      // и всё остальное
}
Потом перегоняешь объект в строку и сохраняешь в SharedPreferences.
Java
1
2
3
4
5
6
7
8
        UserData ud = new UserData ();
        ud.userName = "Worldmen";
        //......
 
        Gson gson = new Gson();
        String json = gson.toJson(ud);
        SharedPreferences sp = context.getSharedPreferences("spName", Context.MODE_PRIVATE);
        sp.edit().putString("myObject", json).apply();
А когда необходимо достаёшь объект и не заморачиваешься с парсингом xml
Java
1
2
3
4
5
6
public static UserData loadObject(Context context) {
        Gson gson = new Gson();
        SharedPreferences sp = context.getSharedPreferences("spName", Context.MODE_PRIVATE);
        String s = sp.getString("myObject", null);
        return gson.fromJson(s, UserData.class);
    }
Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 195
Завершенные тесты: 1
06.11.2015, 09:12  [ТС]     Чтение и запись xml файла на SD-карту #3
У меня тогда будет не просто объект, а список объектов: ArrayList<UserData>
Если это тоже можно сохранить - это отлично.
Perfilov
264 / 165 / 43
Регистрация: 25.02.2015
Сообщений: 435
07.11.2015, 23:55     Чтение и запись xml файла на SD-карту #4
C++
1
2
3
XmlPullParser prepareXpp() {
    return getResources().getXml(R.xml.data);
  }
похоже тут возвращается парсер, в у которого уже позвали метод setInput().
http://developer.android.com/referen...io.InputStream, java.lang.String)
Его можно и самостоятельно позвать. Добыть InputStream из файла думаю не составит труда.
вот тут есть пример:
http://developer.android.com/referen...ullParser.html
правда там стригнридер используется. вот вместо него нужно InputStream от файла посетить.
Yandex
Объявления
07.11.2015, 23:55     Чтение и запись xml файла на SD-карту
Ответ Создать тему
Опции темы

Текущее время: 05:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru