Java / Android - чтение, управление и сохранение файлов XML во внутреннем хранилище
Я разрабатываю приложение для Android, которое будет использовать файловую систему, в которой данные будут храниться в xml -файлах.
Я успешно читаю соответствующий файл и изменяю узлы (изменяются значения - при просмотре в отладчике), но в мой локально сохраненный файл не вносятся изменения.
Процесс: 1. Чтение / открытие локального файла // выполнено 2. Изменить DOM NODE // выполнено 3. Сохранить изменения в моем локальном файле <- не удалось
До сих пор я знаю, что мне придется использовать TransformerFactory после того, как я буду следовать некоторым Учебникам и другим фрагментам кода, изменения все еще не сохранены в моем файле.
Может кто-нибудь сказать мне, что я делаю не так?
Мой код:
try {
File path = a.getFilesDir();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(path.getPath() + "/" + FILENAME_PERMISSIONS);
NodeList myCourses = doc.getElementsByTagName(NODE_COURSE);
for (int i = 0; i < myCourses.getLength(); i++) {
Node course = myCourses.item(i);
Element e = (Element)myCourses.item(i);
Node myPermission = course.getFirstChild();
String name = e.getAttribute(ATTR_NAME);
switch (name){
case FLAG_CrossCult:
myPermission.setTextContent(boolToString(crossCult));
break;
case FLAG_KAIROS:
myPermission.setTextContent(boolToString(kairos));
break;
case FLAG_UnfinStory:
myPermission.setTextContent(boolToString(unfinStory));
break;
case FLAG_EmpToInf:
myPermission.setTextContent(boolToString(empToInf));
break;
case FLAG_YouthKairos:
myPermission.setTextContent(boolToString(youthKairos));
break;
}
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(path.getPath() + "/" + FILENAME_PERMISSIONS));
transformer.transform(source,streamResult);
}
}
catch (ParserConfigurationException e){
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
1 ответ
Я нашел проблему...
Кодекс был почти правильным. Необходимо внести 2 изменения:
1: нужно использовать "новый файл ()"
String myPath = path.getPath() + "/" + FILENAME_PERMISSIONS;
Document doc = docBuilder.parse(new File(myPath));
2: я писал не на тот узел
//Node myPermission = course.getFirstChild();
//is now:
NodeList permissionList = e.getElementsByTagName(NODE_PERMISSION);
Node myPermission = permissionList.item(0);
Я оставлю вопрос здесь, если кто-то должен сделать то же самое..