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
 

krgewb

Top Contributor
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();
    }
}
 

dumstay

Mitglied
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?
 

krgewb

Top Contributor
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();
    }
}
 

dumstay

Mitglied
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
 

dumstay

Mitglied
Habe eben alles nocheinmal überarbeitet.
Funktioniert nicht :D
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;


 
}
       
       
        }
 
K

kneitzel

Gast
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.
 

dumstay

Mitglied
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.
 
K

kneitzel

Gast
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.
 

dumstay

Mitglied
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
 
K

kneitzel

Gast
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.
 

dumstay

Mitglied
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:
K

kneitzel

Gast
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.
 

dumstay

Mitglied
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
 

dumstay

Mitglied
Mit
File selectedFile = fileChooser.getCurrentDirectory();
und
writer = new PrintWriter(selectedFile,"Vorlesung.txt");
geht es leider auch nicht.
 
K

kneitzel

Gast
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 ....
 

mihe7

Top Contributor
Und weil Du ein File-Objekt hast, kannst Du ein passendes auch einfach per new File(selectedFile, "Vorlesung.txt"); erzeugen :)
 

dumstay

Mitglied
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
 
K

kneitzel

Gast
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! :) ).
 

dumstay

Mitglied
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
 

dumstay

Mitglied
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.
 
K

kneitzel

Gast
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();
      }     
    }
  }
}
 

dumstay

Mitglied
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.

🥳
 
K

kneitzel

Gast
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.
 

dumstay

Mitglied
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);
 

krgewb

Top Contributor
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)
 
K

kneitzel

Gast
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
H String zu int/long AWT, Swing, JavaFX & SWT 8
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
J SWT Search string highlite AWT, Swing, JavaFX & SWT 5
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
T replace string AWT, Swing, JavaFX & SWT 1
D String zu StringProperty Konvertieren AWT, Swing, JavaFX & SWT 4
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
S XML Output String Format AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
P Swing String mit unterschiedlichen Formaten zusammenbauen AWT, Swing, JavaFX & SWT 14
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
J 2D-Grafik String aus array wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
L Swing JToogleButton Vordergrundfarbe bei HTML String AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
M Swing String zerlegen AWT, Swing, JavaFX & SWT 2
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
A Text (String) zu einer Box hinzufügen AWT, Swing, JavaFX & SWT 16
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
B Color String Code AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
S String is null Fehler AWT, Swing, JavaFX & SWT 2
M SomeClass.class.getResourceAsStream(String filename) funktioniert nicht in jar) AWT, Swing, JavaFX & SWT 32
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
S String Array Ausgabe im JLabel ??? AWT, Swing, JavaFX & SWT 8
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
B Color.BLUE in String umwandeln AWT, Swing, JavaFX & SWT 4
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
R String in JFrame ausgeben AWT, Swing, JavaFX & SWT 10
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Swing Text eines JButton mit String definieren? Reihenfolge? AWT, Swing, JavaFX & SWT 6
S [Button] setText("String") AWT, Swing, JavaFX & SWT 5
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
I String lowercase, uppercase und umdrehen AWT, Swing, JavaFX & SWT 3
D Swing JTextField String anhängen AWT, Swing, JavaFX & SWT 7
F Swing String Array mit JTextArea anzeigen AWT, Swing, JavaFX & SWT 13
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
H String ausführen und damit weiterarbeiten AWT, Swing, JavaFX & SWT 4
radiac AWT Mausposition als String ausgeben??? AWT, Swing, JavaFX & SWT 5
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
G JTextArea: String formatieren AWT, Swing, JavaFX & SWT 2
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
G in JTextField wie in der Console Ein String ein lesen AWT, Swing, JavaFX & SWT 8
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4
S schauen ob ein string leer ist AWT, Swing, JavaFX & SWT 4
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
S Suchen im String-Array AWT, Swing, JavaFX & SWT 3
mabe83 Swing: jTableCellRenderer -> Klappt nur bei String-Spalte AWT, Swing, JavaFX & SWT 2
O String aus Klasse X in Klasse Y befördern AWT, Swing, JavaFX & SWT 12
M leerzeichen aus string entfernen AWT, Swing, JavaFX & SWT 3
S String an eine andere Klasse im anderem package übergeben AWT, Swing, JavaFX & SWT 3
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
T String in String [] umwandeln?? AWT, Swing, JavaFX & SWT 4
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
E Frage zum String AWT, Swing, JavaFX & SWT 6
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
K Choice auswahl und String in Int AWT, Swing, JavaFX & SWT 8
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
C string wird mehr fach gezeichnet AWT, Swing, JavaFX & SWT 3
S String aus JTextField AWT, Swing, JavaFX & SWT 11
B JTable String übergeben AWT, Swing, JavaFX & SWT 3
C string spiegeln AWT, Swing, JavaFX & SWT 14
M jEditorPane String to html AWT, Swing, JavaFX & SWT 2
A String aus einem JTextField an ein JLabel übergeben AWT, Swing, JavaFX & SWT 10
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
G ActionListener zu String hinzufügen AWT, Swing, JavaFX & SWT 2
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G Quadratmeter im String darstellen AWT, Swing, JavaFX & SWT 2
F String aus JTextField AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben