Pfad für Speichervorgang auswählen

Speedjunkee

Mitglied
Guten Morgen Community!

Ich möchte eine Datei schreiben/speichern. Bisher habe ich den Nutzer einen Dateinamen angeben lassen und die Datei dann im Pfad wo auch der Quelltext liegt abgespeichert. Da der Nutzer aber zur Berechnung der Ausgabedatei den FileChooser nutzt, möchte ich auch beim speichern der Datei die Möglichkeit der Pfadauswahl herstellen.

Über die Suche bzw. auch über die API bin ich auf SAVE_DIALOG gestoßen, kann damit aber leider nicht richtig umgehen.

Mein bisheriger Code mit Angabe des Dateinamens:
Java:
           int i =0;
           
           String Name = FileName;
  
           try (BufferedWriter bw = new BufferedWriter(new FileWriter(Name+".csv")))
         {
           bw.write("Text");
           bw.newLine();
           while (waypoint_list.size() > i)
           {
           
             bw.write("Weiterer Text");
             bw.newLine();
             i++;
           
           }
         } catch(IOException ex)
         {...}

In meinem aktuellen Versuch öffnet sich zwar der "Speichern unter..." Dialog, jedoch wird die Datei unter dem Pfad wo der Quelltext liegt gespeichert.

Java:
            int i =0;
           String Name = FileName;
           JFileChooser fileChooser = new JFileChooser("./");
           fileChooser.showSaveDialog(null);
   
           try (BufferedWriter bw = new BufferedWriter(new FileWriter(Name+".csv")))
         {
           bw.write("Text");
           bw.newLine();
           while (waypoint_list.size() > i)
           {
           
             bw.write("Weiterer Text");
             bw.newLine();
             i++;
           
           }
         } catch(IOException ex)
         {...}

Wie kann ich nun den gewählten Dateipfad und Namen aus dem Speichern unter Dialog übernehmen?

Ich bin euch dankbar für jegliche Hilfe :)
 

karlmasutra

Mitglied
Hallo zusammen,

ich habe eine ähnliche Frage. (denke ich)
Ich nutze aktuell einen FileChooser (javaFX) um den save/openDialog zu öffen. In diesem habe ich bis jetzt einen absoluten Pfad angegeben, in dem sich der FileChooser öffnet. Es funktioniert auch alles.

Nun soll ich mittels Properties die Möglichkeit schaffen, dass der Benutzer den Pfad über Einstellungen selber wählen kann. Ich habe für die Properties einen neuen Dialog mit einem Textfeld gemacht. In diesem soll der Benutzer nun seinen Pfad angeben und damit den "Default-Pfad" überschreiben. Ich habe leider noch gar keine Berührungspunkte mit Properties und stehe deshalb vollkommen auf dem Schlauch. Könnte mir einer helfen?

Danke im voraus.

Hier mal meine 2 Methoden fürs den Speicher/Laden Dialog.
Java:
@FXML


void click_menueLesen(ActionEvent event) throws FileNotFoundException, IOException, ClassNotFoundException {

FileChooser fcLoad = new FileChooser();

fcLoad.setTitle("Dateimanager");

fcLoad.setInitialDirectory(new File("E:/Java")); //fuer MAC /Volumes/JAVA/Java --- fuer Winddoof F:/Java

File file = fcLoad.showOpenDialog(dialogStagePerson);

ObjectInputStream ois = new ObjectInputStream(

new FileInputStream(file));

//Eintraege des Arrays in observableList

Person [] arrTemp = (Person[]) ois.readObject();

for(Person p : arrTemp ) {

if(p != null) {

ovList.add(p);


}

}

listView.refresh();

ois.close();


}
Java:
@FXML


void click_menueSpeichern(ActionEvent event) throws FileNotFoundException, IOException {

FileChooser fcSave = new FileChooser();

fcSave.setTitle("Dateimanager");

fcSave.setInitialDirectory(new File("E:/Java/")); //fuer MAC /Volumes/JAVA/Java --- fuer Winddoof F:/Java

File file = fcSave.showSaveDialog(dialogStagePerson);

ObjectOutputStream oos = new ObjectOutputStream(

new FileOutputStream(file));

//observableList in Array speichern, da observableList nicht gespeichert werden kann


Person[] arrPerson = new Person[100];

int i=0;

for(Person p : ovList) {

arrPerson[I] = p;

i++;


}

oos.writeObject(arrPerson);

oos.flush();

oos.close();


}[I][/I]
[/I]
 

karlmasutra

Mitglied
@Dompteur
Hallo erstmal,
ich habe mich jetzt ein Zeit lang daran versucht, aber ich glaub ich raff es immer noch nicht. Mein Ansatz war jetzt folgender:

1. Ich erzeuge eine Instanz von StringProperty in meinem MainController (in diesem habe ich die Funktion zum abspeichern)
2. ich schreibe zwei getter-Methoden für die StringProperty
Java:
public String getDateipfad() {
    return dateipfad.get();
}

public StringProperty getDateipfadProperty() {
     return dateipfad;
}
3. dann weise ich dem FileChooser die ...InitialDirectory(new File(dateipfad.get()); zu
4. Jetzt übergeben ich mein StringProperty Objekt den Einstellungsdialog
Bis hier hin ist alles gut.

Jetzt möchte ich mein "dateipfad" mit dem Textfeld binden.
Also habe ich eine Methode ActionEvent auf nen Button "gelegt" und sage hier:
Java:
@FXML
void click_butOk(ActionEvent event) {
    dateipfad.bind(tfSpeicherort.getText());
}

Meine Hoffnung war, das ich jetzt den geschrieben text vom Textfeld in meinen "dateipfad" bekomme.
Java:
The method bind(ObservableValue<? extends String>) in the type Property<String> is not applicable for the arguments (String)

Leider geht das nicht, wie man an der Fehlermeldung sieht.

Wo ist mein Denkfehler?

VG
 

Dompteur

Top Contributor
Ich bin nun etwas unsicher. Aber anscheinend verstehen wir die Aufgabenstellung unterschiedlich.
So wie ich das verstanden habe, soll das Startverzeichnis nicht hard-codiert im Programm stehen, sondern in einer Property-Datei definiert sein. Diese kann der Benutzer editieren und damit ändern.
Das Programm liest diese nun immer dann aus, wenn der FileChooser aufgerufen wird.
Ich habe nun auf die Schnelle ein JavaFx-Programm zusammengeklickt und meinen Code eingefügt.
Java:
package application;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            callFileChooser();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    private static void callFileChooser() {
        String defaultDirectory = getProperty ("defaultDirectory");

        FileChooser fcSave = new FileChooser();
        fcSave.setTitle("Dateimanager");
        fcSave.setInitialDirectory(new File(defaultDirectory));
        File file = fcSave.showSaveDialog(null);
    }

    private static String getProperty (String name) {

        String defaultDirectory = "";
        Properties prop = new Properties();
        InputStream input = null;

        try {
            input = new FileInputStream("config.properties");
            prop.load(input);
            defaultDirectory = prop.getProperty("defaultDirectory");
            System.out.println(defaultDirectory);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return defaultDirectory;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Von mir sind die methoden "callFileChooser" und "getProperty", alles andere hat Eclipse bei der Anlage des JavaFx Projekt angelegt.
Du brauchst dann noch im Projekt-Hauptverzeichnis die Datei "config.properties" mit folgendem Inhalt:
Code:
defaultDirectory=E:/Java

Nun zur möglichen Quelle des Missverständnisses: In JavaFx gibt es beim Binding von Model und View ebenfalls den Begriff "Property". Allerdings handelt es sich da um etwas ganz anderes...
 

karlmasutra

Mitglied
Okay also ein ganz anderer Ansatz als ich ihn gemacht habe.
Zum möglichen Missverständnis
Das ist ein Punkt der Aufgabenstellung:
  • Dialog mit JavaFX-Properties zur Festlegung von Einstellungen (z.B. das Arbeitsverzeichnis für das Speichern von Dateien sowie die Adresse des Servers).
Dazu haben wir in der Vorlesung auch kurz was angesprochen. Aber das war halt in Verbindung mit wert1.bind(wert2). Und da hieß es das wir es so auch machen können wenn es um die Zuweisung des Speicherpfades geht. Also so wie es es probiere, mit dateipfad an das Textfeld zu binden.

Ich habe deinen Vorschlag bei mir jetzt mal umgesetzt. Aber leider wirft er eine
java.io.FileNotFoundException: config.properties (No such file or directory).

Die Datei erstelle ich doch ganz normal über File-->New-->Other-->General-->File?

Hier auch nochmal der aktuelle Quellcode:
Java:
void click_menueSpeichern(ActionEvent event) throws FileNotFoundException, IOException {
   String defaultDirectory = getProperty ("defaultDirectory");
   FileChooser fcSave = new FileChooser();
   fcSave.setTitle("Dateimanager");
   fcSave.setInitialDirectory(new File(defaultDirectory)); //fuer MAC /Volumes/JAVA/Java ---> fuer Winddoof F:/Java

   File file = fcSave.showSaveDialog(dialogStagePerson);
   ObjectOutputStream oos = new ObjectOutputStream(
   new FileOutputStream(file));
   //observableList in Array speichern, da observableList nicht gespeichert werden kann
   Person[] arrPerson = new Person[100];
   int i=0;
   for(Person p : ovList) {
      arrPerson[i] = p;
      i++;
   }
   oos.writeObject(arrPerson);
   oos.flush();
   oos.close();
}
 

Dompteur

Top Contributor
Zur Exception:
Du kannst ganz einfach das aktuelle Verzeichnis ermitteln:
Java:
System.out.println(new File(".").getAbsolutePath());
Dort muss dann die Property-Datei liegen.

Nach deiner Klarstellung glaube ich nun auch, dass es um JavaFx geht.
Du schreibst, dass du folgende Fehlermeldung bekommst:
Code:
The method bind(ObservableValue<? extends String>) in the type Property<String> is not applicable for the arguments (String)
Und zwar zu diesem Code:
Java:
@FXML
void click_butOk(ActionEvent event) {
    dateipfad.bind(tfSpeicherort.getText());
}
Was ist "tfSpeicherort" und welchen Typ hat es ?
Falls es ein Control ist, dann müsste es so aussehen:
Java:
dateipfad.bind(tfSpeicherort.textProperty());
 

karlmasutra

Mitglied
tfSpeicherort ist ein Textfeld, welches ich im SceneBuilder erstellt habe.

Ich habe es gleich ausprobiert und es hat endlich geklappt. Tausend Dank! :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
A Titelleiste soll Pfad ausgeben AWT, Swing, JavaFX & SWT 16
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
T Pfad zur *.fxml AWT, Swing, JavaFX & SWT 8
F Pfad von eingelesener Datei AWT, Swing, JavaFX & SWT 10
P JavaFX Komische konsolen Ausgabe (nur roter Pfad) AWT, Swing, JavaFX & SWT 7
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
llabusch Titelleiste Dokumentenname und Pfad/URL anzeigen AWT, Swing, JavaFX & SWT 2
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
K JavaFX Pfad öffen NullPointerException AWT, Swing, JavaFX & SWT 4
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
N Swing JTree TreePath zu Windows Pfad? AWT, Swing, JavaFX & SWT 2
S [Eclipse RCP] Relativer Pfad AWT, Swing, JavaFX & SWT 8
I Swing JFileChooser '\' im Pfad... AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Pfad mit "\" auslesen AWT, Swing, JavaFX & SWT 6
C JTree expand zu einem Pfad bei Programmstart AWT, Swing, JavaFX & SWT 6
E Duch jFileChooser oä. einen Ordner Pfad angeben AWT, Swing, JavaFX & SWT 3
S JTree (absoluter Pfad) AWT, Swing, JavaFX & SWT 2
T Pfad von Datein in Swing AWT, Swing, JavaFX & SWT 5
N Wie finde ich den Pfad eines ImageIcons heraus? AWT, Swing, JavaFX & SWT 8
G Relativer Pfad in Rich Client Anwendung AWT, Swing, JavaFX & SWT 4
B imageicon relativer Pfad AWT, Swing, JavaFX & SWT 5
M Brauche nur den Pfad zum Speichern AWT, Swing, JavaFX & SWT 8
B CD-Pfad bzw. CD-Laufwerksbuchstabe erfragen wie? AWT, Swing, JavaFX & SWT 4
S JFileChooser Datei-Pfad auf Netzwerkfreigaben AWT, Swing, JavaFX & SWT 9
M Problem mit relativem Pfad AWT, Swing, JavaFX & SWT 4
S Kompletten JTree-Pfad unterlegen AWT, Swing, JavaFX & SWT 3
S Mit JFileChooser Kompletten Pfad in Textfeld auslesen AWT, Swing, JavaFX & SWT 2
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 20
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
D JavaFX Schadensberechnung für Kartenspiel AWT, Swing, JavaFX & SWT 1
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
L actionListener für Button AWT, Swing, JavaFX & SWT 97
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
MiMa Package Struktur für GUI Programmierung AWT, Swing, JavaFX & SWT 26
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B eclipse für JavaFx setuppen AWT, Swing, JavaFX & SWT 4
K Swing Struktur für TreeTable rekursiv aufbauen AWT, Swing, JavaFX & SWT 17
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Ein Patten für das Gluon Mobile Framework AWT, Swing, JavaFX & SWT 7
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
Soloeco JavaFX Dreifachklick für MenuButton erforderlich AWT, Swing, JavaFX & SWT 2
L JavaFX Lösungsvorschläge für dieses coole Control AWT, Swing, JavaFX & SWT 8
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
S Swing Finde Grund für NullPointerExeption nicht. AWT, Swing, JavaFX & SWT 2
W JavaFX (j)Unittests für GUI AWT, Swing, JavaFX & SWT 0
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
P Swing Empfehlungen für einfaches Computerspiel AWT, Swing, JavaFX & SWT 4
L DragDropped für jede Node AWT, Swing, JavaFX & SWT 0
temi JavaFX Lösungsansatz für Umsetzung gesucht AWT, Swing, JavaFX & SWT 4
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
L Font für Dashboard AWT, Swing, JavaFX & SWT 3
F Swing JColorChooser für die JToggleButtons AWT, Swing, JavaFX & SWT 5
S JavaFX Optimierung für verschiedene Auflösungen AWT, Swing, JavaFX & SWT 12
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Kloso Swing Pseudocode für Strafurzeichnung AWT, Swing, JavaFX & SWT 4
F Konstruktor für "Vier Gewinnt" AWT, Swing, JavaFX & SWT 10
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
R Swing Welche LayoutManager sind die richtigen für mich? AWT, Swing, JavaFX & SWT 11
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
C Slider für Zeitauswahl AWT, Swing, JavaFX & SWT 3
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben