FileWriter mit einer Variable

Creeep

Mitglied
Moin,

folgender Fall:
Habe ne Texteingabe und eine Datei die erstellt werden soll.

Java:
fw = new FileWriter("Java.txt");[/Java]
Und nun möchte ich anstatt Java.txt eine String Variable einsetzen die aus der Texteingabe ausgelesen wird.
[Java]String.valueOf("Dateiname"); // Dateiname = Die Texteingabe
hätte ich als Idee ob es klappt weiß ich nicht.

Nur gibt der mir beim Probieren ne dicke stange errors aus:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.io.FileOutputStream.<init>(FileOutputStream.java:172)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
        at java.io.FileWriter.<init>(FileWriter.java:46)
        at Sitzordnung.Datei_speichernActionPerformed(Sitzordnung.java:430)
        at Sitzordnung.access$300(Sitzordnung.java:38)
        at Sitzordnung$4.actionPerformed(Sitzordnung.java:228)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Ich danke im vorraus für jede Idee und hilfe
 
Hi,

was genau machst du denn in:

[XML=5]at Sitzordnung.Datei_speichernActionPerformed(Sitzordnung.java:430)[/XML]

Da ist wohl irgendein Objekt noch nicht initialisiert.
 
Das hier ist der Quelltext von Speichern:
Java:
 private void Datei_speichernActionPerformed(java.awt.event.ActionEvent evt) {                                                

        String.valueOf("Dateiname");

        FileWriter fw = null;
        try{
  fw = new FileWriter(String);
  for(int i=0;i<=list.size();i++){
  fw.write(list.get(i));
  fw.append(System.getProperty("line.separator") ); // e.g. "\n"
  }
        }
catch ( IOException e ) {
  System.err.println( "Konnte Datei nicht erstellen" );
}
finally {
  if ( fw != null )
    try { fw.close(); } catch ( IOException e ) { }
}
    }

Vielleicht liegt bei ValueOf das problem
 
[JAVA=7]fw = new FileWriter(String);[/code]

String ist ein Java-Typ und keine Variable! Du kannst entweder an der Stelle den
Dateinamen direkt übergeben oder, um deinen bisherigen Code richtig zu nutzen:

[JAVA=3]String fileName = String.valueOf("Dateiname");[/code]

(wobei das "valueOf" überflüssig ist) und dann:

[JAVA=7]fw = new FileWriter(fileName);[/code]

Meckert dir das deine IDE denn gar nicht an?
 
Hi,

versuch es mal so:

Java:
  private void Datei_speichernActionPerformed(java.awt.event.ActionEvent evt) {
    //Das ".txt" kannst Du weglassen, falls Du in deinem Textfield auch die Dateibezeichnung mit angeben möchtest.
    File f = new File(textField.getText() + ".txt");
    try{
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f, true)));
      //Das true, welches hier dem FileOutputStream übergeben wird bedeutet, dass der Inhalt der Datei nicht überschrieben
      //werden soll. Setzt du den Wert auf false, wird der Inhalt der Datei überschrieben
      for(int i=0; i<list.size(); i++){
        //Der Inhalt deiner ArrayList
        bw.write(list.get(i));
        //Neue Zeile
        bw.newLine();
      }
      bw.close();
    }catch(Exception e){
      System.out.println(e);
    }
  }

Greetz
Crasher
 
@ Gman:
Nein mein IDE motzt mir da nirgendwo rum. die Errors die ich gepostet habe waren alles was er mir ausgab.
fw = new FileWriter(String);

String ist ein Java-Typ und keine Variable! Du kannst entweder an der Stelle den
Dateinamen direkt übergeben oder, um deinen bisherigen Code richtig zu nutzen:

String fileName = String.valueOf("Dateiname");

(wobei das "valueOf" überflüssig ist) und dann:
String war der Name der Stringvariable.
Ich habe ihr einen sehr logischen Namen gegeben sry.
Zum 2:
String fileName = String.valueOf("Dateiname");
1.) warum ist ValueOf überflüssig und wie könnte ich es sonst schreiben?
und 2.) heißen die "" vor und nach dem Dateiname nicht eigtl das, dass was dort steht direkt übernommen wird?

@Crasher:
Ich habe deinen Vorschlag übernommen und (zum glück) verstanden dankesehr läuft gut =)
 
String war der Name der Stringvariable.

Wie gesagt ist "String" ein Typ/Java-Klasse, daher ist es ziemlich unglücklich das als
Variablennamen zu nehmen. Es gibt auch einfache Konventionen was Variablennamen
angeht: erster Buchstabe immer klein, danach Camelcase.

1.) warum ist ValueOf überflüssig

Wenn du im Java-Code "irgendeineZeichenkette" schreibst (mit den Anführungszeichen) dann
ist das bereits ein String, daher ist das "String.valueOf" überflüssig. Du lässt dir damit
nämlich einen String von einem String zurückgeben.
 
Okay, ich hoffe ich verstehe dich so weit richtig das ich einfach:
Variablenname = ("Textfield"); Schreibe und der dann den Inhalt des Textfields als seinen eigennen Inhalt übernimmt?
 
Ah,

bedeutet:

String.valueOf("Dateiname"); // Dateiname = Die Texteingabe

also das du den Dateinamen aus einem JTextField übernehmen willst? Dann muss es heißen:

Java:
String fileName = <namedesTextfields>.getText();

Eventuell solltest du dir das mal durchlesen.
 

Zurück
Oben