String als Textdatei in ausgewähltem Speicherplatz speichern

Diskutiere String als Textdatei in ausgewähltem Speicherplatz speichern im AWT, Swing, JavaFX & SWT Bereich.
mihe7

mihe7

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

dumstay

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
 
J

JustNobody

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

dumstay

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
 
D

dumstay

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

JustNobody

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

dumstay

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.

🥳
 
J

JustNobody

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

dumstay

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

krgewb

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)
 
krgewb

krgewb

Aber warum ging es nicht, als er versucht hat, es nach meiner Art zu programmieren?
 
J

JustNobody

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.
 
Thema: 

String als Textdatei in ausgewähltem Speicherplatz speichern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben