Java Properties

Hi,
stehe vor folgendem Problem:

Möchte in einer Properties Datei einen counter speichern, den ich wieder auslesen kann.
Meine Applikation ist ein einfaches JFrame, mit den Buttons „erhöhen“ und „get“.
„erhöhen“ soll den counter um eins erhöhen und ihn in die Properties Datei speichern.
„get“ soll mir den Wert auslesen… Sollte eigentlich relativ simpel sein, aber ich komme auf keinen grünen Zweig.
Hier der code:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JFrame;


public class counter extends JFrame implements ActionListener{
 JButton open;
 Properties props;
 Properties props2;
 FileInputStream input;
 FileOutputStream output;
 int counter = 1;
 String filename;

 public counter(){
 JButton ink = new JButton();
 JButton get = new JButton();
 FlowLayout flow = new FlowLayout();

 ink.setText("erhöhen");
 get.setText("get");
 ink.addActionListener(this);
 get.addActionListener(this);
 this.setSize(300, 300);
 this.setLayout(flow);
 this.add(ink);
 this.add(get);
 filename = "counter.properties";

 Properties props = new Properties();

 }

 public void save(int i){
 try{
 output = new FileOutputStream(filename);
 props.put("Counter", i);
 props.store(output, "Die Props counter!");
 }catch (Exception e){
 e.printStackTrace();
 }

 }

 public int load (){
 try{
 input = new FileInputStream(filename);
 props.load(input);
 counter = Integer.parseInt(props.get("Counter").toString());

 }catch (Exception d){
 d.printStackTrace();
 } 
 return counter;

 }

 public void actionPerformed(ActionEvent e){
 String label = e.getActionCommand();

 if (label.equals("erhöhen")){
 counter++;
 try{
 if (new File(filename).exists()){
 save(counter);
 }
 else {
 save(counter);
 }
 }catch (Exception d){
 d.printStackTrace();
 }

 }


 if (label.equals("get")){
 counter = load();
 System.out.println(counter);

 }
 }

 public static void main (String[] args){
 counter count = new counter();
 count.show();

 }

}

Danke für die Hilfe,
Grüße!

Ach so, die Fehlermeldung:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at java.util.Properties.store0(Unknown Source)
at java.util.Properties.store(Unknown Source)
at counter.save(counter.java:46)

Hmmm…

Und die passende Zeile 46 lautet:

props.store(output, "Die Props counter!");

-)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Properties können nur String Werte enthalten.

Ohne es genau zu prüfen schreibst du einen Integer Wert in die Property. Das geht auch gut, bis er versucht das Ding zu speichern.

Lösung: Wenn du deinen Wert in die Property schreibst diesen zunächst in einen String umwandeln (macht String.valueOf(Object) für dich)

Danke jetzt funzt es :smile: