Komische Zeichen beim Abspeichern von TextFelder

plammy

Bekanntes Mitglied
Hallo 🙂 ich versuche ein paar Eingaben aus verschiedene Textfelder abzuspeichern.. An sich klappt das ja .. Die txt.Datei wird gespeichert und da werden ja anscheinend Daten hinterlegt. Es sollen ja verschiedene Zahlen gespeichert werden. Stattdessen sind aber nur komische Zeichen in dem txt.Datei zu sehen wie:

d Ǵ d Ǵ Ǵ Ǵ P Ǡ Ĭ 2 d Ǵ


Das sollten eigentlich die Zahlen:
500 100 500 100 500 500 480 80 50 300 500 100
sein


Java:
public class GUI extends JFrame implements ActionListener{

    public GUI() {
        initComponents();   
   }
    ........... 


//Speichern
        if (object.getSource() == save){
            
                JFileChooser fc = new JFileChooser();  

                int returnVal = fc.showSaveDialog(CreateFile.editPanel);
  
                if (returnVal == JFileChooser.APPROVE_OPTION)
                {
                    File saveFile = new File(fc.getSelectedFile()+".txt");  
                  
                    BufferedWriter bw;
                    try 
                        
                    {
                        bw = new BufferedWriter(new FileWriter(saveFile));

                        bw.write(CreateFile.cf.headerH);
                        bw.write(CreateFile.cf.headerW);
                        bw.write(CreateFile.cf.contentH);
                        bw.write(CreateFile.cf.contentW);
                        bw.write(CreateFile.cf.footerH);
                        bw.write(CreateFile.cf.footerW);
                        bw.write(CreateFile.cf.tile1H);
                        bw.write(CreateFile.cf.tile1W);
                        bw.write(CreateFile.cf.tile2H);
                        bw.write(CreateFile.cf.tile2W);
                        bw.write(CreateFile.cf.tile3H);
                        bw.write(CreateFile.cf.tile3W);

                        bw.close();
                    } catch(IOException e){
                        System.out.println("writer failture");
                    }
                }
        }

Java:
public class CreateFile extends JPanel implements ActionListener
{
public CreateFile()
    {
        initComponents();     
    
    }
    

    public void initComponents() 
    {
        headerWidth = new JTextField();
        headerWidth.setDocument(new IntegerField(4));   
        headerHeight = new JTextField();
        headerHeight.setDocument(new IntegerField(4));     
        contentWidth = new JTextField();
        contentWidth.setDocument(new IntegerField(4));      
        ...........
          if (object.getSource() == buttonCreateLayout)
        {   
      
            cf.headerW = Integer.parseInt(headerWidth.getText());       //Daten auslesen
            cf.headerH = Integer.parseInt(headerHeight.getText());
            repaint();                                                  //Zeichnen
            cf.contentW = Integer.parseInt(contentWidth.getText());
            cf.contentH = Integer.parseInt(contentHeight.getText());
            repaint();
            cf.footerW = Integer.parseInt(footerWidth.getText());
            cf.footerH = Integer.parseInt(footerHeight.getText());
            repaint();
          
        } 
        ............
}

Java:
public class IntegerField extends PlainDocument{
    
    int maxSize;
    
    public IntegerField(int limit){
        maxSize = limit;
    }
    
    
    public void insertString(int offset, String str,  AttributeSet a) throws BadLocationException
    {
      try{
             Integer.parseInt(str);
         }
         catch(Exception ex)  
         {
            Toolkit.getDefaultToolkit().beep();             
            return ;
         }
      if((getLength()+str.length()) <= maxSize){
      super.insertString(offset,str, a);
    }
    }
}
 
ein einzelnes main-Programm mit 2-3 Zeilen zur Erstellung des BufferedWriters und dann Speichern einer Zahl oder einer einfachen statischen Konstante ginge auch,
du brauchst für dieses Problem keine GUI, keinen FileChooser, kein kompliziertes Textfeld usw.,
in der Hinsicht lohnt sich auch, Fehler zu überdenken/ zu extrahieren

die write(int)-Methode speichert einzelne bytes, wie in der API zu lesen,
wandle deine Zahlen erst in String,
Zeilenumbruch oder Leerzeichen wirst du dann gewiss auch wollen, aber das kommt sicherlich erst als zweiter Schritt
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben