# JavaBib und PrintWriter - BibTex-Datei schreiben



## Daniel_L (16. Mrz 2009)

Hallo,

kennt jemand von euch die Bibliothek javabib? Es ist eine API zum Parsen von BibTex-Dateien. Das parsen an sich klappt auch wunderbar:

```
BibtexFile bf = new BibtexFile();
            BibtexParser bp = new BibtexParser(false);
            InputStreamReader isr;
            InputStream is;
            try {
                File bibfile = fc.getSelectedFile();
                is = new FileInputStream(bibfile);
                isr = new InputStreamReader(is, "ISO8859_1");
                bp.parse(bf, isr);
                List<BibtexNode> bibNodes = bf.getEntries();
                BibtexEntry flushit = null;
                for(BibtexNode node: bibNodes) {
                    if(node instanceof BibtexEntry) {
                        // get bibtex-entry
                        BibtexEntry entry = (BibtexEntry)node;
                        // get all entry fields
                        Map m = entry.getFields();
                        // retrieve all keys, i.e. author, title etc.
                        Set<?> ks = m.keySet();
                        Iterator<?> ksi = ks.iterator();
                        while(ksi.hasNext()) {
                            String s = (String) ksi.next();
                            System.out.println(s);
                        }
                        // retrieve all values
                        Collection<?> c = m.values();
                        Iterator<?> i = c.iterator();
                        while (i.hasNext()) {
                            BibtexString bs = (BibtexString)i.next();
                            System.out.println(bs.getContent());
                        }
                    }
...
```

So, aber das Schreiben in eine Datei, das versteh ich noch nicht. Nun gibt es die Methode _printBibtex_, sowohl beim BibtexFile als auch bei BibtexEntry.

Die Methode über den PrintWriter scheint die einzige Möglichkeit zu sein, Daten wieder auszugeben. Wie kriegt man diese am besten über PrintWriter in eine Datei?

Habe schon im obigen Code in die for-next-Schleife folgendes versucht:

```
BibtexFile bibf = new BibtexFile();
                    bibf.addEntry(entry);
                    PrintWriter pf = new PrintWriter(new File(bibfile.toString()+"2"));
                    bibf.printBibtex(pf);
```

Aber da gibt es angeblich eine Null-Pointer-Exception in der Zeile mit "printBibtex(pf)":


> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> at bibtex.dom.BibtexFile.printBibtex(BibtexFile.java:135)


----------



## hdi (16. Mrz 2009)

Ich hab keine Ahnung von dieser Bibliothek, aber gibt es dazu keine API?
Ich meine irgendwo musst du hier ja ein null-Objekt haben, was etwas komisch ist,
wenn der Fehler wirklich in dem unten geposteten Code vorkommt.

Immerhin kann ein Konstruktor glaub ich niemals ein null zurückliefern. Er kann
ja "this" nicht schreiben. Also.. Wo genau liegt denn deine Zeile 135?


----------



## Daniel_L (16. Mrz 2009)

hdi hat gesagt.:


> Also.. Wo genau liegt denn deine Zeile 135?



Gute Frage, wenn ich das wüsste... die letzte Zeile im Output-Fenster, die auf Code innerhalb meines Programms verweist, ist diese:


> at desktopapplication1.DesktopApplication1View.jButton1ActionPerformed(DesktopApplication1View.java:313)



und das ist eben _bibf.printBibtex(pf);_.


----------



## hdi (16. Mrz 2009)

Überprüf doch mal mit System.out.print Meldungen ob bibf null ist,
oder pf null ist.
Ansonsten, weisst du was diese printBibtex genau macht? Haste Zugriff auf
den Source-Code der Methode?

Setz doch mal n Debug Punkt dorthin, dann siehste ja ob der Debugger sich den
Source irgendwoher ziehen kann.


----------



## Daniel_L (16. Mrz 2009)

ich glaube, den Source kann man sich dort auch herunterladen. Ich schau mir das mal an. Mal sehen, ob ich daraus schlau werde.


----------

