FileWriter schreibt nicht in Datei

dubimax

Mitglied
Hallo, ich habe das Problem, dass wenn ich einen Button (Bestätigen) drücke, soll eigentlich ein Text (zum Testen das Wort "test") in eine txt Datei geschrieben werden.

Leider passiert dies nicht. Eine Fehlermeldung erscheint auch nicht.

Hier der Code, vllt. sieht ja jemand auf anhieb den Fehler und Danke im Voraus.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;


public class DialogUI {

	private JTextField dialogText;
	private JDialog _dialog;
	private JButton bestaetigung;
	private FileWriter fw;
	
	public DialogUI() {
		super();
		_dialog = initDialog();
		registriereUIAktionen();
	}

	private JDialog initDialog() {

		JDialog dialog = new JDialog((JFrame) null, "Eintragen", true);
		JPanel panel = new JPanel(new BorderLayout());
		bestaetigung = new JButton("Bestätigen");
		dialogText = new JTextField();
		dialog.add(panel);

		panel.add(dialogText, BorderLayout.NORTH);
		panel.add(bestaetigung, BorderLayout.SOUTH);

		dialog.setBounds(300, 200, 300, 200);
		dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		dialog.setVisible(true);

		return dialog;
	}

	public JDialog getDialog() {
		return _dialog;
	}

	public void setDialog(JDialog dialog) {
		this._dialog = dialog;
	}

	public String getDialogText() {
		return dialogText.getText();
	}

	public JTextField setDialogText(JTextField dialogText) {
		return this.dialogText = dialogText;
	}

	

	public JButton getBestaetigung() {
		return bestaetigung;
	}

	public void setBestaetigung(JButton bestaetigung) {
		this.bestaetigung = bestaetigung;
	}
	
	public void registriereUIAktionen(){
		
		final File file = new File("./woosa.txt");
		this.getBestaetigung().addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				
			
				try {
					fw = new FileWriter(file , false);
					fw.write("test");
					
					fw.close();

					
				} catch (IOException e1) {
					
					JOptionPane.showMessageDialog(null, "Fehler:", null, JOptionPane.ERROR_MESSAGE);
					//System.err.println( "Konnte Datei nicht erstellen" );
				}
				
			}
				
		});
	}
	
}
 
Zuletzt bearbeitet:
setz mal hinter das

Java:
fw.write("Hallo");

noch ein
Code:
fw.flush();

ansonsten mal im Catch block den stackTrace mit ausgeben lassen , ggf. wird die Datei nicht gefunden o.ä
[EDIT]
Immer den Qualifizierten Pfad angeben , das hier wird nicht funktionieren denk ich

Java:
 final File file = new File("./woosa.txt");

sprich

Java:
"C:/Dokumente/Mein Ordner/woosa.txt"

Ich vermute hier fliegt eine FileNotFoundException
[/EDIT]
 
Zuletzt bearbeitet:
Moin KaoZ,

das fw.flush(); hatte ich bis jetzt immer mit dran, habe allerdings gelesen, dass das fw.close(); schon das flush() beinhaltet.

Hmm... mit dem Pfad, hab ichs grad mal probiert, bekomme da den selben stacktracefehler:

Code:
!ENTRY org.eclipse.jdt.ui 4 10001 2014-06-27 22:20:18.964
!MESSAGE Internal Error
!STACK 1
Java Model Exception: Java Model Status [Unknown javadoc format for getClass() [in Object [in Object.class [in java.lang [in C:\Program Files\Java\jre7\lib\rt.jar]]]]]
	at org.eclipse.jdt.internal.core.JavadocContents.getMethodDoc(JavadocContents.java:158)
	at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:671)
	at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:499)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:93)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:77)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:62)
	at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:573)
	at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
!SUBENTRY 1 org.eclipse.jdt.core 4 1009 2014-06-27 22:20:18.964
!MESSAGE Unknown javadoc format for getClass() [in Object [in Object.class [in java.lang [in C:\Program Files\Java\jre7\lib\rt.jar]]]]
 
Mal abgesehen das ich es ohne Probleme ausführen kann passiert halt nix beim Klick auf den Button , wie auch ^^
 
Zuletzt bearbeitet:
So....


Ich hab mir mal möglichst wenig aufwand gemacht:

Kopiere das mal und führe es aus

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
 
 
public class DialogUI {
 
    private JTextField dialogText;
    private JDialog _dialog;
    private JButton button;
    private FileWriter fw;
    
    public DialogUI() {
        _dialog = initDialog();
    }
 
    private JDialog initDialog() {
 
        JDialog dialog = new JDialog((JFrame) null, "Eintragen", true);
        JPanel panel = new JPanel(new BorderLayout());
        button = new JButton("Bestaetigen");
        button.addActionListener(new ButtonListener());
        dialogText = new JTextField();
        dialog.add(panel);
 
        panel.add(dialogText, BorderLayout.NORTH);
        panel.add(button, BorderLayout.SOUTH);
 
        dialog.setBounds(300, 200, 300, 200);
        dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
 
        
        
        return dialog;
    }
 
    public JDialog getDialog() {
        return _dialog;
    }
 
    public void setDialog(JDialog dialog) {
        this._dialog = dialog;
    }
 
    public String getDialogText() {
        return dialogText.getText();
    }
 
    public JTextField setDialogText(JTextField dialogText) {
        return this.dialogText = dialogText;
    }

    class ButtonListener implements ActionListener{

		@Override
        public void actionPerformed(ActionEvent e) {
	       if(e.getActionCommand().equals("Bestaetigen")){
	    	   System.out.println("Hallo Welt");
	       }
        }
    	
    }
    
    public static void main(String[] args) {
	    new DialogUI();
    }
    
}

[TIPP]
1. Aussagekräftigere namen nutzen
2. wenn du schon von außen Listener setzen können wollen möchtest, dann musst du diese Funktionalität auch korrekt implementieren.
3. Ich habe hier den einfacheren weg über eine Innere Klasse gewählt welche das ActionListener Interface implementiert.
4. du hast zu viele überflüssige Methoden ........
5. Jede Klasse sollte eine Funktion erfüllen, ergo alles was da nicht rein gehört in Hilfsklassen auslagern, z.B das Schreiben der Daten
6. nutze shortcut returns für bessere übersichtlichkeit
[/TIPP]
 
Zuletzt bearbeitet:
Hmm also hab da dann noch den FileWriter eingebaut und dann kommt folgendes:

Code:
!ENTRY org.eclipse.jdt.ui 4 10001 2014-06-27 22:34:48.399
!MESSAGE Internal Error
!STACK 1
Java Model Exception: Java Model Status [Unknown javadoc format for close() [in OutputStreamWriter [in OutputStreamWriter.class [in java.io [in C:\Program Files\Java\jre7\lib\rt.jar]]]]]
	at org.eclipse.jdt.internal.core.JavadocContents.getMethodDoc(JavadocContents.java:158)
	at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:671)
	at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:499)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:93)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:77)
	at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:62)
	at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:573)
	at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
!SUBENTRY 1 org.eclipse.jdt.core 4 1009 2014-06-27 22:34:48.399
!MESSAGE Unknown javadoc format for close() [in OutputStreamWriter [in OutputStreamWriter.class [in java.io [in C:\Program Files\Java\jre7\lib\rt.jar]]]]
 
Code bitte , das scheint mir eher nach einem Problem mit deiner JRE oder IDE auszusehen

Weil , und hier mal ein Screen:

 
Zuletzt bearbeitet:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class DialogUI {

	private JTextField dialogText;
	private JDialog _dialog;
	private JButton bestaetigung;
	private FileWriter fw;

	public DialogUI() {
		super();
		_dialog = initDialog();
		
		//registriereUIAktionen();
	}

	private JDialog initDialog() {

		JDialog dialog = new JDialog((JFrame) null, "Eintragen", true);
		JPanel panel = new JPanel(new BorderLayout());
		bestaetigung = new JButton("Bestaetigen");
		dialogText = new JTextField();
		dialog.add(panel);

		panel.add(dialogText, BorderLayout.NORTH);
		panel.add(bestaetigung, BorderLayout.SOUTH);

		dialog.setBounds(300, 200, 300, 200);
		dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		dialog.setVisible(true);

		return dialog;
	}

//	public void registriereUIAktionen() {
//
//		final File file = new File("./woosa.txt");
//		this.getBestaetigung().addActionListener(new ActionListener() {
//
//			@Override
//			public void actionPerformed(ActionEvent e) {
//
//				try {
//					fw = new FileWriter(file, false);
//					fw.write("test");
//
//					fw.close();
//
//				} catch (IOException e1) {
//
//					JOptionPane.showMessageDialog(null, "Fehler:", null,
//							JOptionPane.ERROR_MESSAGE);
//					// System.err.println( "Konnte Datei nicht erstellen" );
//					e1.getStackTrace();
//				}
//
//			}
//
//		});
//	}
	
	class ButtonListener implements ActionListener{
		 
        @Override
        public void actionPerformed(ActionEvent e) {
           if(e.getActionCommand().equals("Bestaetigen")){
        	   //final File file = new File("./woosa.txt");
        	   try {
					fw = new FileWriter(new File("C:/test.txt"));
					fw.write("test");
					fw.close();

				} catch (IOException e1) {

					JOptionPane.showMessageDialog(null, "Fehler:", null,
							JOptionPane.ERROR_MESSAGE);
					// System.err.println( "Konnte Datei nicht erstellen" );
					e1.getStackTrace();
				}
           }
        }
        
    }

	public JDialog getDialog() {
		return _dialog;
	}

	public void setDialog(JDialog dialog) {
		this._dialog = dialog;
	}

	public String getDialogText() {
		return dialogText.getText();
	}

	public JTextField setDialogText(JTextField dialogText) {
		return this.dialogText = dialogText;
	}

	public JButton getBestaetigung() {
		return bestaetigung;
	}

	public void setBestaetigung(JButton bestaetigung) {
		this.bestaetigung = bestaetigung;
	}
}
 
Wenn du auch mit Angabe eines Voll Qualifizierten Pfades diese Fehlermeldung bekommst, und oder du diesen Fehler auch bekommst wenn du meine Code ausführst (mit einem von dir existierenden Pfad) würde ich in betracht ziehen ggf. mal das JRE neu aufzusetzen, ggf ist es ein Problem mit einem der .jar's oder so , scheint augenscheinlich zumindest darauf hin zu deuten .
 
Moin,

so Problem gelöst. Hätte meine registriereUI() nicht im Konstruktor aufrufen dürfen sondern in meiner initDialog().

Nun läuft es einwandfrei auch mit meinem Code.

Vielen Dank für die Mühe und Zeit, die Ihr euch genommen habt.
 

Zurück
Oben