2012-03-22 2 views
0

У меня есть проблема, чтобы сохранить файл свойств в андроиде, это код:сохранить файл свойства программы

Properties prop = new Properties(); 
prop.load(context.getResources().openRawResource(R.raw.config)); 

Utils.log(context,"db.version =>"+ prop.get("db.version")); 

prop.setProperty("db.version", "2"); 
String fileName = context.getResources().getString(R.raw.config); 
FileOutputStream fos = new FileOutputStream(fileName); 
prop.store(fos, ""); 

, когда я пытаюсь загрузить (и печать) нет проблем, но когда я попытаться сохранить свой новый набор, я получаю FileNotFoundException

здесь LogCat:

03-22 18:05:03.262: INFO(11536): db.version =>1 
03-22 18:05:03.262: ERROR(11536): java.io.FileNotFoundException: /res/raw/config.properties (No such file or directory) 

заранее спасибо ...

+0

попробуйте этот 'pro.load (YOUR_CLASS_NAME.class.getResourceAsStream (" config.properties "));' –

+0

или если у вас есть файл в папке с ресурсами, тогда 'pro.load (YOUR_CLASS_NAME.class.getResourceAsStream ("/assets/config.properties "));' –

ответ

0

Вы пытаетесь написать файловую часть .apk. Вы не можете обновить что-либо из apk вашего приложения во время выполнения.

Чтение в порядке, и поэтому у вас нет никаких проблем. Если вы хотите сохранить некоторые предпочтения могли бы хотеть, чтобы проверить это: http://developer.android.com/guide/topics/data/data-storage.html#pref

2

я уже прочитал, что azertiti предложить мне, но я думал, что простой способ управлять пару ключ-значение

однако, я использовал SharedPreferences

сначала я создал файл XML свойство в разрешении/XML/conf.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <PreferenceCategory 
     android:title="My preference" 
     android:key="preference"> 

     <CheckBoxPreference 
      android:key="pwd_request" 
      android:defaultValue="true" 
     /> 

    </PreferenceCategory>   
</PreferenceScreen> 

после, я назвал (в классе деятельности) методы для чтения/записи значение свойства:

//read... 
PreferenceManager.setDefaultValues(this, R.xml.conf, true); 
userProps = PreferenceManager.getDefaultSharedPreferences(this); 
Utils.log(this, userProps.getBoolean("pwd_request", false)); 
//...and write 
edit.putBoolean("pwd_request", false); 
edit.commit(); 

на мой взгляд: я не знаю, что я написал это правильный способ сделать это, но я думаю, что это не хорошая Android архитектуры для управления полями свойств, это слияние Явы традиционной Свойства и метод управления пользовательским интерфейсом ... почему я должен объявить свое свойство CheckBoxPreference? .. Это просто свойство.

+0

Используемый вами PreferenceScreen предназначен для отображения активности с предпочтениями не для хранения данных. Если вы хотите сохранить некоторые значения с предопределенными значениями, вы можете загрузить их сначала, используя метод из исходного сообщения, чем сохранить их с помощью SharedPreferences. Другой вариант предоставления этих значений по умолчанию может заключаться в том, чтобы иметь их в качестве значений по умолчанию, если свойство не определено, например, ваш код для getBoolean. В любом из этих случаев вам не нужен PreferenceScreen, и это не лучший способ сделать это. – azertiti

Смежные вопросы