Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA/XML] File wel lezen, niet schrijven

Pagina: 1
Acties:

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Mogge, het leek mij verstandig hier even om hulp te vragen, aangezien ik echt vanaf 4 uur vanmiddag bezig ben geweest met Google en API's doorspitten om eruit te komen.

Ik wil graag een bestand met xml structuur gebruiken als simpel configbestand, welke via een settings-menu aangepast kan worden.

Ik heb dit bestand uitgelezen, en alle info die erin staat wordt goed weergegeven.

Wat ik echter op geen manier voor elkaar krijg, is het veranderen van een waarde, het lijkt dus alsof het bestand niet goed geparsed wordt waardoor hij niet kan schrijven.

Op de volgende manier parse ik de file

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.
                                              newInstance();
            DocumentBuilder builder = null;
            try {
                builder = dbf.newDocumentBuilder();
            } catch (ParserConfigurationException ex1) {
                ex1.printStackTrace();
            }
            config = builder.parse(file);
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        }

Hiermee kan ik het bestand dus prima uitlezen, maar ik heb het idee dat dit niet werkt om te wijzigen/schrijven in het bestand.

Ik heb op verschillende manieren geprobeerd de waarden te veranderen, maar er gebeurt simpelweg niets.. ook geen error in de compiler.
Ik dacht dat dit wel de juiste manier was... één van de pogingen

Java:
1
2
3
       NodeList nl = config.getElementsByTagName("savepath");
       Node save = nl.item(0);
       save.setNodeValue("Test123");


En nog één
Java:
1
2
3
4
5
6
7
        NodeList nl = config.getElementsByTagName("savepath");
        Element e = (Element) nl.item(0);
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
            CharacterData cd = (CharacterData) child;
            cd.setData("test123");
        }

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:59

Janoz

Moderator Devschuur®

!litemod

Je kunt niet zomaar in een bestand ergens wat bytes tussenvoegen. Zomaar een node aanpassen gaat dus niet. Om de veranderingen op te slaan zul je het hele bestand opnieuw weg moeten schrijven

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • redfox314
  • Registratie: December 2004
  • Laatst online: 07-11 14:35
uitgebreider. een Document instantie is een kopie van je xml document. Conceptueel stelt die geen xml file voor maar XML document. Hoe dat specifiek is opgeslagen doet er voor Document niet toe. Je kan dat document eventueel zelfs rechtstreeks parsen van een netwerk stream. Om het terug op te slaan moet je het terug transformeren naar een FileOutputStream. In DOM worden documenten niet opgeslagen maar getransformeerd naar <vul hier een transmissieformaat in naar keuze>.
In jou geval transformeer je je document naar een text file.

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Oké dan, dus eigenlijk moet ik het volgende doen.

- Open en lees Config.xml uit
- Schrijf de nieuwe gegevens weg in een Config_temp.xml
- Verwijder Config.xml
- Rename Config_temp.xml naar Config.xml

Ik ga zoiets in ieder geval vanavond even proberen.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Of je kan Config.xml ook gewoon overschrijven :)
Eventueel kan je hem nog vlug even kopiëren naar een archief folder.

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
-FoX- schreef op maandag 03 maart 2008 @ 15:00:
Of je kan Config.xml ook gewoon overschrijven :)
Doh.. ja kheb een beetje weinig geslapen vannacht.. 5:30 erin en 8:00 eruit :z

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Oke hij werkt weer... had er zelf op kunnen komen maar ik denk wel vaker veels te moeilijk.

Thnx voor de tip :)

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Configuratie lezen/schrijven van/naar XML zit standaard in de JDK, zie java.util.prefs.Preferences. Lijkt een beetje op het wiel opnieuw uitvinden, maar mischien wilde je gewoon wat leren, dan heb ik niets gezegd.

[ Voor 8% gewijzigd door ari3 op 05-03-2008 18:20 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 13:37

Robtimus

me Robtimus no like you

ari3 schreef op woensdag 05 maart 2008 @ 18:19:
Configuratie lezen/schrijven van/naar XML zit standaard in de JDK, zie java.util.prefs.Preferences. Lijkt een beetje op het wiel opnieuw uitvinden, maar mischien wilde je gewoon wat leren, dan heb ik niets gezegd.
Niet helemaal. De default Preferences oplossing gebruikt nml de registry, om precies te zijn Software\JavaSoft\Prefs als root, met daarin een folder structuur voor de classes die gebruikt zijn. Dit is zowel in HKLM als in HKCU te vinden, afhankelijk of je de user node of system node hebt gekozen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1