String als Textdatei in ausgewähltem Speicherplatz speichern

dumstay

Mitglied
Hallo,

erneut muss ich mich noch einmal an dieses Forum wenden mit folgender Problematik:

Ich habe einen ActionListener geschrieben der folgendes tun soll:

Sobald auf einen Button geklickt wird, soll ein Speicherplatz ausgesucht werden, z.B. Desktop.
Im Anschluss soll eine übergebene String Datei in eine neu erstellte Txt. Datei geschrieben werden und auf dem Desktop gespeichert werden.
Sobald ich auf den Button jedoch klicke, öffnet sich das Fenster und ich kann einen Speicherort auswählen.
Wenn ich jetzt aber z.B. den Desktop auswähle wird nichts gespeichert. Es erscheint jedoch auch keine Fehlermeldung.

Kann jemand auf die Schnelle erkennen wo das Problem in meinem Code liegt?

Java:
class FilechooserListener implements ActionListener
    {
       
       
        @Override
      public void actionPerformed(ActionEvent ae) {
            //Speicherpfad auswählen
              JFileChooser fileChooser = new JFileChooser();
              fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnValue = fileChooser.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
          File selectedFile = fileChooser.getSelectedFile();
       
          System.out.println(selectedFile.getName());
          PrintWriter writer;
       
       
              try {
                           
             writer = new PrintWriter(selectedFile, "vorlesung.txt");
            String textString = ("Titel: "+frame.getTitel1().getText()+"    "+ "Titel2: "+frame.getTitel2().getText()+"    "+"Titel3: "+frame.getTitel3().getText());
           
           
            writer.write(textString);
            writer.close();
   
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        }  
    }

Best Grüße
 
Also ich mache das so:
Java:
PrintWriter pWriter = null;
try {
    // Schreibt die Datei. append ist auf false gesetzt.
    FileWriter fw = new FileWriter("datei.txt", false);
    BufferedWriter bw = new BufferedWriter(fw);
    pWriter = new PrintWriter(bw);
    pWriter.println("test erich");
    System.out.println("txt-Datei erstellt.");
}
catch (Exception e) {
    e.printStackTrace();
} finally {
    if (pWriter != null) {
        pWriter.flush();
        pWriter.close();
    }
}
 
Also ich mache das so:
Java:
PrintWriter pWriter = null;
try {
    // Schreibt die Datei. append ist auf false gesetzt.
    FileWriter fw = new FileWriter("datei.txt", false);
    BufferedWriter bw = new BufferedWriter(fw);
    pWriter = new PrintWriter(bw);
    pWriter.println("test erich");
    System.out.println("txt-Datei erstellt.");
}
catch (Exception e) {
    e.printStackTrace();
} finally {
    if (pWriter != null) {
        pWriter.flush();
        pWriter.close();
    }
}

Hier hast du jedoch keinen Speicherplatz festgelegt, oder etwa doch?
 
Java:
JFileChooser source = (JFileChooser) e.getSource();

if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {

    File file = source.getSelectedFile();

    if (file.toString().toLowerCase().endsWith(".txt") == false) {
        file = new File(file + ".txt");
    }
    try {
        // Schreibt die Datei.
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
        osw.write(full_string);
        osw.close();
    }
}
 
Java:
JFileChooser source = (JFileChooser) e.getSource();

if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {

    File file = source.getSelectedFile();

    if (file.toString().toLowerCase().endsWith(".txt") == false) {
        file = new File(file + ".txt");
    }
    try {
        // Schreibt die Datei.
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
        osw.write(full_string);
        osw.close();
    }
}


sieht jetzt wie folgt aus
Java:
class FilechooserListener implements ActionListener
    {
        
        
        @Override
      public void actionPerformed(ActionEvent ae) {
            //Speicherpfad auswählen
            
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
      int returnValue = fileChooser.showOpenDialog(null);
      if (returnValue == JFileChooser.APPROVE_OPTION) {
        File selectedFile = fileChooser.getSelectedFile();
    
        System.out.println(selectedFile.getName());
        PrintWriter writer;
      }
            JFileChooser source = (JFileChooser) ae.getSource();
            //Speicherpfad auswählen
            
            if (ae.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {

                File file = source.getSelectedFile();

                if (file.toString().toLowerCase().endsWith(".txt") == false) {
                    file = new File(file + ".txt");
                }
                try {
                    // Schreibt die Datei.
                    String textString = ("Titel: "+frame.getTitel1().getText()+"    "+ "Titel2: "+frame.Titel2().getText()+"    "+"Titel 3: "+frame.getTitel3().getText());
                    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
                    osw.write(textString);
                    osw.close();
                } catch (FileNotFoundException e) {

                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                    
                }
            }
          
          
        }
funktioniert leider immer noch nicht
 
Habe eben alles nocheinmal überarbeitet.
Funktioniert nicht 😀
Java:
class FilechooserListener implements ActionListener
    {
     
        //Speicherpfad auswählen
 
        @Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
          JFileChooser fileChooser = new JFileChooser();
          fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  int returnValue = fileChooser.showOpenDialog(null);
  if (returnValue == JFileChooser.APPROVE_OPTION) {
    File selectedFile = fileChooser.getSelectedFile();
 
 
    String titelString = ("Titel: "+frame.getTitel1().getText()+"    "+ "Titel2: "+frame.getTitel2().getText()+"    "+"Titel3: "+frame.getTitel3().getText());
         
          try (FileWriter write  = new FileWriter(selectedFile.getName()); BufferedWriter bWriter = new BufferedWriter(write)){
Habe das ganze noch einmal überarbeitet.
Funktioniert allerdings immer noch nicht :D
           
              bWriter.write(titelString);
              bWriter.close();
        } catch (IOException ae) {
           ae.printStackTrace();
        }
       
    System.out.println(selectedFile.getName());
    }

    PrintWriter writer;

    writer=null;


 
}
       
       
        }
 
Bitte: Schreib genau, was nicht funktioniert. Was für Fehler bekommst Du?

Ich will nicht immer raten müssen bei so Beiträgen.

Bei deinem ersten Code:
new PrintWriter(selectedFile, "vorlesung.txt");
Dokumentation der Klasse PrintWriter ansehen! Z.B. unter https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html
Der zweite Parameter gibt ein Encoding an und "vorlesung.txt" ist kein encoding.

Bei deinem aktuellen Stand habe ich aber beim überfliegen erst einmal nichts gesehen. Daher: bitte Details liefern.
 
Danke für die Antwort.
Es wird in meinem Workspace eine Datei Vorlesung.txt erstellt allerdings enthält die Textdatei nichts. Mit folgendem aktuellen Quellcode:

Java:
class FilechooserListener implements ActionListener
    {
        
        //Speicherpfad auswählen
    
        @Override
public void actionPerformed(ActionEvent e) {
        //Speicherpfad auswählen
      JFileChooser fileChooser = new JFileChooser();
      fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
}
PrintWriter writer;

writer=null;


      try {
          
    FileWriter fw = new FileWriter("vorlesung.txt", false);
    BufferedWriter bufferedWriter = new BufferedWriter(writer);
    writer = new PrintWriter( "vorlesung.txt");
    String textString = ("Titel: "+frame.getTitel1().getText()+"    "+ "Titel2: "+frame.getTitel2().getText()+"    "+"Titel3: "+frame.getTitel3().getText());
    
    
    writer.write(textString);
    

} catch (FileNotFoundException ae) {

    ae.printStackTrace();
} catch (IOException ae) {
    // TODO Auto-generated catch block
    ae.printStackTrace();
}  finally {
    if (writer != null) {
        writer.flush();
        writer.close();
    }
}       
        
        }
  
    
}

Der Fehlercode lautet:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException


at java.io.Writer.<init>(Writer.java:88)


at java.io.BufferedWriter.<init>(BufferedWriter.java:101)


at java.io.BufferedWriter.<init>(BufferedWriter.java:88)


at controller.Controller$FilechooserListener.actionPerformed(Controller.java:186)


at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)


at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)


at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)


at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)


at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)


at java.awt.Component.processMouseEvent(Component.java:6533)


at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)


at java.awt.Component.processEvent(Component.java:6298)


at java.awt.Container.processEvent(Container.java:2236)


at java.awt.Component.dispatchEventImpl(Component.java:4889)


at java.awt.Container.dispatchEventImpl(Container.java:2294)


at java.awt.Component.dispatchEvent(Component.java:4711)


at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)


at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)


at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)


at java.awt.Container.dispatchEventImpl(Container.java:2280)


at java.awt.Window.dispatchEventImpl(Window.java:2746)


at java.awt.Component.dispatchEvent(Component.java:4711)


at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)


at java.awt.EventQueue.access$500(EventQueue.java:97)


at java.awt.EventQueue$3.run(EventQueue.java:709)


at java.awt.EventQueue$3.run(EventQueue.java:703)


at java.security.AccessController.doPrivileged(Native Method)


at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)


at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)


at java.awt.EventQueue$4.run(EventQueue.java:731)


at java.awt.EventQueue$4.run(EventQueue.java:729)


at java.security.AccessController.doPrivileged(Native Method)


at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)


at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)


at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)


at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)


at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)


at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)


at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)


at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)



Bitte: Schreib genau, was nicht funktioniert. Was für Fehler bekommst Du?

Ich will nicht immer raten müssen bei so Beiträgen.

Bei deinem ersten Code:
new PrintWriter(selectedFile, "vorlesung.txt");
Dokumentation der Klasse PrintWriter ansehen! Z.B. unter https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html
Der zweite Parameter gibt ein Encoding an und "vorlesung.txt" ist kein encoding.

Bei deinem aktuellen Stand habe ich aber beim überfliegen erst einmal nichts gesehen. Daher: bitte Details liefern.
 
Kannst Du bei den Zeilen einmal erläutern, was Du genau vor hast?

Code:
writer=null;
    FileWriter fw = new FileWriter("vorlesung.txt", false);
    BufferedWriter bufferedWriter = new BufferedWriter(writer);
    writer = new PrintWriter( "vorlesung.txt");

Also erst erstellst Du einen FileWriter. Ok, der schreibt in die Datei vorlesung.txt.
Dann erzeugst Du einen BufferedWriter auf writer - writer ist aber null (erste Zeile), daher wohl die NPE.
Dann erzeugst Du einen neuen PrintWriter, ebenfalls auf vorlesung.txt, aber da die Datei bereits geöffnet ist, würde das nicht gehen, so Du die NPE nicht hättest.

Also Du willst mit dem PrintWriter arbeiten? Dann nutz ihn direkt, also nur die letzte der Zeilen. Oder Du nutzt den FileWriter, dann könntest Du den BufferedWriter auf fw erstellen.
 
Kannst Du bei den Zeilen einmal erläutern, was Du genau vor hast?

Code:
writer=null;
    FileWriter fw = new FileWriter("vorlesung.txt", false);
    BufferedWriter bufferedWriter = new BufferedWriter(writer);
    writer = new PrintWriter( "vorlesung.txt");

Also erst erstellst Du einen FileWriter. Ok, der schreibt in die Datei vorlesung.txt.
Dann erzeugst Du einen BufferedWriter auf writer - writer ist aber null (erste Zeile), daher wohl die NPE.
Dann erzeugst Du einen neuen PrintWriter, ebenfalls auf vorlesung.txt, aber da die Datei bereits geöffnet ist, würde das nicht gehen, so Du die NPE nicht hättest.

Also Du willst mit dem PrintWriter arbeiten? Dann nutz ihn direkt, also nur die letzte der Zeilen. Oder Du nutzt den FileWriter, dann könntest Du den BufferedWriter auf fw erstellen.


Ich bin nun wieder bei meinem zuletzt genutztem code.
Ich habe alles in die if{} Bedingung des filechoosers eingefügt. Es funktioniert leider dennoch nicht, da ich nicht weiß wo ich nun den Speicherort also die File "selectedFile" einbringen muss
 
Bitte gib uns den genauen Code, den Du derzeit hast mit der genauen Information, was nicht geht. "Dein zuletzt genutzter Code" sagt mir so erst einmal nichts.

Du hast Code, mit dem Du eine Eingabe bezüglich Datei bekommen kannst. Du hast Code, der eine Datei schreiben kann. Dan musst Du das nur noch kombinieren um eben die gewählte Datei zu schreiben.
 
Bitte gib uns den genauen Code, den Du derzeit hast mit der genauen Information, was nicht geht. "Dein zuletzt genutzter Code" sagt mir so erst einmal nichts.

Du hast Code, mit dem Du eine Eingabe bezüglich Datei bekommen kannst. Du hast Code, der eine Datei schreiben kann. Dan musst Du das nur noch kombinieren um eben die gewählte Datei zu schreiben.

Sorry, da hast du recht.
(Der BufferedWriter und FileWriter fw werden nicht genutzt)

Hier mein aktueller code:

Java:
class FilechooserListener implements ActionListener


    {

        //Speicherpfad auswählen
  
        @Override

public void actionPerformed(ActionEvent e) {


        //Speicherpfad auswählen


      JFileChooser fileChooser = new JFileChooser();


      fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);


int returnValue = fileChooser.showOpenDialog(null);


if (returnValue == JFileChooser.APPROVE_OPTION]) {



}


File selectedFile = fileChooser.getSelectedFile();


PrintWriter writer;


writer=null;

      try {

    FileWriter fw = new FileWriter("vorlesung.txt", false);


    writer = new PrintWriter(selectedFile, "vorlesung.txt");


    BufferedWriter bufferedWriter = new BufferedWriter(writer);


  


    String textString = (frame.getVorlesungen().getSelectedItem().toString());


  


  


    writer.write(textString);


} catch (FileNotFoundException ae) {





    ae.printStackTrace();


} catch (IOException ae) {


    // [B]TODO[/B] Auto-generated catch block


    ae.printStackTrace();


}  finally {


    if (writer != null) {


        writer.flush();


        writer.close();


    }


}     


      


        }





  


}

 
}
 
Zuletzt bearbeitet:
Also erst einmal fällt auf, dass der Block nach dem if(returnValue == ....) leer ist. Der nachfolgende Code soll vermutlich da im if Block sein.

Dann brauchst Du den FileWriter nicht, denn den benutzt Du ja nicht.

Schau Dir den Inhalt von selectedFile an. Das ist doch genau die Datei, die Du schreiben willst. Du willst doch keine Datei vorlesung.txt mehr schreiben. Wenn der Benutzer sagt: hallo.txt soll die Datei sein, dann wird hallo.txt geschrieben!

Daher: Streiche das "vorlesung.txt" aus dem Konstruktor von PrintWriter. (Der Aufruf macht ja auch keinen Sinn, wie ich bereits erläutert hatte.)

Dann hättest Du eine erste Version, die etwas machen sollte.

Wenn du das haben solltest: schau Dir noch einmal try with resources an, denn dann entfällt der finally block. Aber das ist nur eine Optimierung.
 
Also erst einmal fällt auf, dass der Block nach dem if(returnValue == ....) leer ist. Der nachfolgende Code soll vermutlich da im if Block sein.

Dann brauchst Du den FileWriter nicht, denn den benutzt Du ja nicht.

Schau Dir den Inhalt von selectedFile an. Das ist doch genau die Datei, die Du schreiben willst. Du willst doch keine Datei vorlesung.txt mehr schreiben. Wenn der Benutzer sagt: hallo.txt soll die Datei sein, dann wird hallo.txt geschrieben!

Daher: Streiche das "vorlesung.txt" aus dem Konstruktor von PrintWriter. (Der Aufruf macht ja auch keinen Sinn, wie ich bereits erläutert hatte.)

Dann hättest Du eine erste Version, die etwas machen sollte.

Wenn du das haben solltest: schau Dir noch einmal try with resources an, denn dann entfällt der finally block. Aber das ist nur eine Optimierung.

Okay, jetzt verstehe ich soglangsam.
Aber was sollte ich dann in den PrintWriter schreiben wenn nicht "Vorlesung.txt"?
Achsooo... jetzt erkenne ich mein Problem:
Mit der selected file des File Writers möchte ich lediglich den Speicherort festlegen z.B. Desktop.
Dann soll dort eine txt Datei mit meinem Inhalt erstellt werden
 
Mit
File selectedFile = fileChooser.getCurrentDirectory();
und
writer = new PrintWriter(selectedFile,"Vorlesung.txt");
geht es leider auch nicht.
 
PrintWriter nimmt nur einen Parameter mit der Datei. (Bei zwei Parametern wäre der zweit die Kodierung)

Also willst du selectedFile + / + Vorlesung.txt

Also drei Strings aneinander gekettet ... etwas in der Art hast du ja auch gemacht beim Text für die Datei ....
 
Und weil Du ein File-Objekt hast, kannst Du ein passendes auch einfach per new File(selectedFile, "Vorlesung.txt"); erzeugen 🙂
 
Und weil Du ein File-Objekt hast, kannst Du ein passendes auch einfach per new File(selectedFile, "Vorlesung.txt"); erzeugen 🙂

Tut mir leid ich stehe etwas auf dem Schlauch.
Heißt ich hätte laut JustNobody dem printwriter nur eine file übergeben dürfen?
In etwa so?: writer = new PrintWriter(new File(selectedFile, "Vorlesung.txt"));
Funktioniert allerdings auch nicht
 
Also ich habe übersehen, dass selectedFile kein String sondern ein File ist. Dadurch lässt sich der Dateiname nicht ganz so einfach aufbauen.

PrintWriter hat viele Konstruktoren. Vielleicht schaust Du Dir einmal mit mir https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html an.

Wenn Du auf der Seite etwas runter scrollst, dann siehst Du alle Konstruktoren (unter "Constructor Summary")
Und da sieht man dann: Du kannst den PrintWriter mit einem File, einem OutputStream, einem Dateinamen oder einem Writer erzeugen.

Das einfach mal als Erläuterung. Ich habe bisher den Code nicht kopiert um lokal zu testen - das werde ich einmal im Anschluss tun um zu dem Problem etwas sagen zu können (Bitte nicht vergessen: "Funktioniert nicht" immer ausführlich beschreiben! 🙂 ).
 
Also ich habe übersehen, dass selectedFile kein String sondern ein File ist. Dadurch lässt sich der Dateiname nicht ganz so einfach aufbauen.

PrintWriter hat viele Konstruktoren. Vielleicht schaust Du Dir einmal mit mir https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html an.

Wenn Du auf der Seite etwas runter scrollst, dann siehst Du alle Konstruktoren (unter "Constructor Summary")
Und da sieht man dann: Du kannst den PrintWriter mit einem File, einem OutputStream, einem Dateinamen oder einem Writer erzeugen.

Das einfach mal als Erläuterung. Ich habe bisher den Code nicht kopiert um lokal zu testen - das werde ich einmal im Anschluss tun um zu dem Problem etwas sagen zu können (Bitte nicht vergessen: "Funktioniert nicht" immer ausführlich beschreiben! 🙂 ).

Vielen dank schonmal! Hätte nicht erwartet hier so viel Hilfe zu bekommen.
Großes Lob an das Forum.

Ich bin gerade dabei mir alle Konstruktoren durchzulesen. Mal sehen ob ich einen passenden finde
 
Langsam komme ich meinem Problem näher.
Wenn ich mir die selected File ausgeben lasse (als String mit dem Pfad) kommt lediglich mein Benutzer als Pfad raus, obwohl ich Desktop gewählt habe und hier finde ich auch meine Datei "Vorlesung.txt"
Scheint also alles richtig zu sein bis auf den FileChooser...
Der bekommt wohl nicht den Pfad bis zum Desktop übergeben.
 
Also ich habe jetzt einmal ein kleines Beispielprogramm zum Testen geschrieben, das auf Deinem Code basiert. Ich habe da ein paar Dinge heraus genommen, so das ], welches noch im if war und so:

Java:
import java.awt.*;
import javax.swing.*;
import java.io.*;

class FilechooserListener {
  public static void main(String[] args) {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int returnValue = fileChooser.showOpenDialog(null);
    if (returnValue == JFileChooser.APPROVE_OPTION) {
      File selectedFile = fileChooser.getSelectedFile();
      PrintWriter writer = null;
      try {
    File targetFile = new File(selectedFile, "vorlesung.txt");
    System.out.println(targetFile);
        writer = new PrintWriter(targetFile);
        writer.write("test");
      } catch (IOException ae) {
        ae.printStackTrace();
      }  finally {
        if (writer != null) {
          writer.flush();
          writer.close();
        }
      }     
    }
  }
}

Das hat bei mir in Tests erfolgreich funktioniert.

Das Ganze aber noch mit try-with-resources und ohne die Debug-Ausgabe des Zieles, damit es kürzer wird:

Java:
import java.awt.*;
import javax.swing.*;
import java.io.*;

class FilechooserListener {
  public static void main(String[] args) {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    int returnValue = fileChooser.showOpenDialog(null);
    if (returnValue == JFileChooser.APPROVE_OPTION) {
      File selectedFile = fileChooser.getSelectedFile();
      try (PrintWriter writer = new PrintWriter(new File(selectedFile, "vorlesung.txt"));) {
        writer.write("test");
      } catch (IOException ae) {
        ae.printStackTrace();
      }     
    }
  }
}
 
Siehe da, es funktioniert.
Ich weiß nicht wie ich dir gerade danken soll...
Ich hoffe du hast eine verdammt schöne restliche Woche man!
Möge das Glück und Freude dir zugeflogen kommen.

🥳
 
Vielen Dank für die guten Wünsche und schön, dass ich dir helfen konnte. Und sorry für gewisse Verwirrungen, weil ich es nicht selbst sofort ausprobiert habe.

Solltest Du noch Probleme haben, die Lösung oder die Dokumentation von PrintWriter voll und ganz zu verstehen oder so, dann melde Dich ruhig erneut.
 
Vielen Dank für das Angebot.
Tatsächlich möchte ich nun mehrere Objekte einer JComboBox ausgeben lassen. Allerdings hat das nun nichts mehr mit dem Thema hier zu tun.

Was ich damit meine ist:
Ich Speichere mir zuvor einige Objekte in eine JComboBox welche ich dann iteriert (Für jedes Element eine Zeile) ausgeben lassen möchte.
Leider wird hier kein Text ausgeben.
Ich habe es mal damit versucht :
Vorlesungen ist hier das JComboBox Objekt.
Java:
int i = frame.getVorlesungen().getModel().getSize();
                 int k=0;
                 String string ="";
                 while ( k <= i) {
                 
                      string = string + "/n"+ frame.getVorlesungen().getItemAt(k).toString();
                     k++;
                 
                 }
 writer.write(string);
 
Bezüglich Beitrag #9:
Exceptions bitte auch in Code-Tags posten

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.Writer.<init>(Writer.java:88)
at java.io.BufferedWriter.<init>(BufferedWriter.java:101)
at java.io.BufferedWriter.<init>(BufferedWriter.java:88)
at controller.Controller$FilechooserListener.actionPerformed(Controller.java:186)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 
Aber warum ging es nicht, als er versucht hat, es nach meiner Art zu programmieren?
Dein Code war aus meiner Sicht ok. Beide Beispiele sahen gut aus. Aber er hat diese nicht konsequent übernommen und ich vermute da die Probleme.

So hat er da ja viel ‚gemischt‘. Der PrintWriter war noch da aber er hat Deine Klassen zusätzlich genommen. Der Transfer hin zu seinem Code ist ihm da Offensichtlich nicht gelungen.

Ich habe dann auch einfach am PrintWriter festgehalten, aber da gibt es kein expliziten Grund für a.la. ‚Deine Idee ist schlecht‘ oder so. Genau so gut hätte man den Code mehr an Deinem Code ausrichten können.
 

Zurück
Oben