Probleem met FileOutputStream

Status
Niet open voor verdere reacties.

Wimpieoh

Gebruiker
Lid geworden
18 mrt 2008
Berichten
40
Ik ben momenteel bezig met Java (vermits dit veel gevraagd wordt) en ik redelijk goed kan programmeren (huh, huh). Onderstaande code is een GUI-applicatietje waarin een aantal dranken in een JList worden getoond. Met de knoppen rechts kan je een element toevoegen, verwijderen, naar boven of naar beneden brengen. Nu wou ik nog een knop [bewaren] bijmaken dewelke alle aanwezige dranken wegschrijft naar een bestand (van type .txt). Natuurlijk zal nadien vanuit dit bestand dienen gelezen te worden in plaats van de vaste waarden met addElement. Ik slaag er echter niet in de gegevens weg te schrijven. Kan iemand mij hierbij helpen. Alvast bedankt!

Code:
package jpf;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Oef20 extends JFrame implements ActionListener {

    private JButton verwijderen, omhoog, omlaag, toevoegen, bewaren;
    private JList jLijst;
    private DefaultListModel dLijst;

    public static void main(String[] args) {     
        Oef20 venster = new Oef20();
        venster.setSize(500,250);
        venster.setTitle("Keuzelijst");
        venster.createGUI();
        venster.setVisible(true);
    }

    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = this.getContentPane();
        window.setLayout(new GridLayout(1,1));
        dLijst = new DefaultListModel();
        dLijst.addElement("water");
        dLijst.addElement("bier");
        dLijst.addElement("koffie");
        dLijst.addElement("champagne");
        dLijst.addElement("jenever");
        dLijst.addElement("wijn");
        dLijst.addElement("thee");
        jLijst = new JList(dLijst);
        jLijst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane lijstMetSchuif = new JScrollPane(jLijst);
        window.add(lijstMetSchuif);
        JPanel paneel = new JPanel();
        paneel.setLayout(new GridLayout(5,1));
        verwijderen = new JButton("verwijderen");
        omhoog = new JButton("omhoog");
        omlaag = new JButton("omlaag");
        toevoegen = new JButton("toevoegen");
        bewaren = new JButton("bewaren");
        paneel.add(verwijderen);
        paneel.add(omhoog);
        paneel.add(omlaag);
        paneel.add(toevoegen);
        paneel.add(bewaren);
        window.add(paneel);
        verwijderen.addActionListener(this);
        omhoog.addActionListener(this);
        omlaag.addActionListener(this);
        toevoegen.addActionListener(this);
        bewaren.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == verwijderen) verwijderen();
        if (e.getSource() == omhoog) omhoog();
        if (e.getSource() == omlaag) omlaag();
        if (e.getSource() == toevoegen) toevoegen();
        if (e.getSource() == bewaren) bewaren();
    }

    private void verwijderen() {
        if (jLijst.getSelectedIndex() >= 0) {
            dLijst.removeElementAt(jLijst.getSelectedIndex());
        }
    }

    private void omhoog() {
        int pos = jLijst.getSelectedIndex();
        if (pos>0) {
            dLijst.add(--pos, jLijst.getSelectedValue());
            dLijst.removeElementAt(pos + 2);
            jLijst.setSelectedIndex(pos);
        }
    }

    private void omlaag() {        
        int pos = jLijst.getSelectedIndex();
        int aantal = dLijst.size();
        if (pos < aantal && pos > 0) {
            dLijst.add(pos + 2, jLijst.getSelectedValue());
            dLijst.removeElementAt(pos);
            jLijst.setSelectedIndex(pos + 1);
        }
    }
    
    private void toevoegen() {
        String nieuw = JOptionPane.showInputDialog(null, "Geef een nieuwe drank");        
        if (nieuw.length() > 1 && nieuw != null) {
            boolean OK = true;
            for (int i=0; i<dLijst.size(); i++) {
                if (nieuw.equals(dLijst.get(i))) {     
                    OK = false;
                }
            }
            if (OK) {
                dLijst.add(dLijst.size(), nieuw);    
            }
        }
    }

    private void bewaren() {
        try {
            File f = new File("H:\\java pf\\jpf\\keuzelijst.txt");
            FileOutputStream fos = new FileOutputStream(f);
        }
        catch (Exception e) {e.getMessage();}
        for (int i=0; i<dLijst.size(); i++) {            
            fos.write(dLijst.get(i));
        }
    }
 
Je moet jezelf aanleren bij streams deze altijd te closen in een finally block. In dit geval heb je de stream niet geclosed/geflushed en daarom komt er niets in de file.

Bij het schrijven en lezen van tekst kan je beter Readers en Writers gebruiken. Zie onderstaande voorbeeld.
[JS]PrintWriter out = null;
try {
File f = new File("H:\\java pf\\jpf\\keuzelijst.txt");
out = new PrintWriter(f);
for (int i = 0; i < dLijst.size(); i++) {
out.println(dLijst.get(i));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (Exception e2) {}
}[/JS]
 
Laatst bewerkt:
Het is niet mooi maar in het finally block moet je eigenlijk om ieder statement wat fout kan gaan een try/catch block zetten, als je zeker wil weten dat alles uigevoerd wordt. Als je in het finally block geen try/catch zet kan je last krijgen van "lost exceptions"
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan