String als Textdatei in ausgewähltem Speicherplatz speichern

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

dumstay

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

krgewb

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

dumstay

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

krgewb

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

dumstay

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
 
D

dumstay

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;


 
}
       
       
        }
 
J

JustNobody

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

dumstay

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

JustNobody

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

dumstay

Erst benutzt du den writer und danach erzeugst du ihn.
Genau das habe ich geändert. Nun funktioniert alles. Nur der Speicherplatz scheint noch nicht festgelegt zu sein.
Es wird immernoch alles in meinem Workspace eingespeichert, ein Fehler wird allerdings nicht angezeigt.
 
D

dumstay

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
 
J

JustNobody

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

dumstay

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

JustNobody

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

dumstay

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
 
D

dumstay

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

JustNobody

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

String als Textdatei in ausgewähltem Speicherplatz speichern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben