Swing Dateinamen im JFileChooser vorschlagen

Pepe Rohny

Aktives Mitglied
Hi,

ich habe folgendes Problem: ich will mit einem JFileChooser eine Datei unter einem bestimmten Namen abspeichern und zwar unabhängig davon, ob sie bereits existiert. Dem JFileChooser übergebe ich einen Verzeichnispfad - was auch gut funktioniert. Nur: wie bekomme ich den Namen für die Datei in das zugehörige Feld?

Wenn die Datei bereits existiert ist es einfach: den Pfad der Datei im Konstruktor als Parameter übergeben.

Wenn die Datei nicht existiert und ich den Pfad der Datei im Konstruktor als Parameter übergebe, lande ich in meinem home-Verzeichnis und das Feld für den Namen ist leer.

Also über gebe ich den Pfad für das Verzeichnis im Konstruktor als Parameter und ...
nun ja - würde gerne den Dateinamen im entsprechenden Feld eintragen.

Keine Chance?

Pepe
 
Hi,

das mit dem Verzeichnis stimmt schon - ich meine: es wird der richtige Pfad benutzt. Die System-Reaktion ist auch verständlich: wenn der Pfad nicht existiert kann man eine Ausnahme werfen oder auch in ein Verzeichnis wechseln, das mit Sicherheit existiert: z. B. das home-Verzeichnis.

Das Problem besteht darin, dass es - wie der Name schon sagt - (nur) eine Dateiauswahl ist. Das Erzeugen einer neuen Datei ist dabei nicht vorgesehen. Dumm gelaufen ?!

Ich habe mir die entsprechende Doku bei Oracle angesehen - das ist eigentlich alles was ich davon kenne.

Zum Thema Google: nun ja - mit den passenden Suchbegriffen findet man was - aber das sind im Grunde nur ähnlich gelagerte Fälle, aber keine befriedigenden Antworten.

Pepe
 
ich verstehe dein Posting nicht, in der ersten Hälfe wiederholst du glaube ich im Grunde deine Ursprungsfrage,
ist das allgemeine Rhetorik oder hatte ich konkret etwas falsch verstanden? 😉

in der zweiten Hälfte schreibst du dass die google-Ergebnisse nicht passen,
auch hier ist mir leider wieder unklar inwiefern sie nicht passen?

ich habe den Code aus meinem Link jetzt mal in folgendes Programm eingebaut:
Java:
public class TestGUI  extends JFrame {
    public TestGUI()   {
        JButton b = new JButton("klick");
        b.addActionListener(new saveButtonListener());

        add(b);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 300);
        setVisible(true);
    }

    public static void main(String[] args)  {
        new TestGUI();
    }
}

class saveButtonListener  implements ActionListener {
    JFileChooser fc = new JFileChooser();

    public void actionPerformed(ActionEvent e)
    {
        // set the current directory the application's current directory
        try
        {
            // create a file object containing the cannonical path of the desired file
            File f = new File(new File("x.html").getCanonicalPath());
            // set the selected file
            fc.setSelectedFile(f);
        }
        catch (IOException ex3)
        {
            System.out.println("ex");
        }
        // show the dialog; wait until dialog is closed
        fc.showSaveDialog(null);
    }
}
kopieren, starten, Button klicken -> es erscheint ein FileChooser, im Verzeichnis des Projekts (bei mir IDE Eclipse),
und 'x.html' ist als Dateiname vorgegeben (und es gibt keine solche Datei bisher)

ist das nun deine Frage exakt gelöst, ja oder nein? 😉
oder läuft das bei dir nicht (so)?
 
Java:
           File f = new File(new File("x.html").getCanonicalPath());
Möchtest du an der Stelle eine neue Datei erstellen, dann musst du zusätzlich folgendes aufrufen


Java:
            f.createNewFile();
 
Hi,

@SlaterB:

Rhetorik? Nee - normal nich'. Kann sein das wir uns gerade missverstehen.

Meine Frage habe ich im ersten Beitrag im ersten Satz formuliert - es täte mir Leid wenn sie unverständlich sein sollte.

Zum Code: wenn ich das richtig verstanden habe, wird eine Datei angelegt und übergeben. Kann man machen, ist aber nicht das was ich will; das ist ein bisschen komplizierter. Gleich mehr dazu ...

@diel2001: nicht unbedingt - sach' ich mal.

Ich habe mal folgenden Lösungsansatz angedacht:
mit new File("/absoluterPfad/dateiname") bekomme ich ein File-Objekt - unabhängig davon, ob die Datei existiert (wenn nicht wird sie eben erzeugt) -, dass ich dem JFileChooser im Konstruktor als Parameter übergebe. Nur: was passiert, wenn der Benutzer den Dateinamen ändert? Schliesslich ist der übergebene Parameter ja nur ein Vorschlag. Werde ich gleich mal ausprobieren ...
Wenn ich das richtig verstehe, muss ich alles selbst machen: File-Objekt holen, Namens-Änderung überprüfen und möglicherweise das jetzt überflüssige File-Objekt löschen.

Pepe
 
ein erstelltes File-Objekt ist nicht unbedingt auch eine erstellte Datei wo auch immer (ein PC muss ja nicht mal eine Festplatte haben)
createNewFile() hat schon für sich eine Funktion
 
> Eigentlich wollte ich nur den schon vorhandenen JFileChooser ...

und eigentlich ist es von Anfang an immer nur eine Zeile:
Datei x soll ausgewählt sein:
-> fc.setSelectedFile(neues file .. richtiges Verzeichnis .. + Dateiname);

ist eine Zeile wirklich zuviel?,
du machst dir so viele komplizierte Hintergedanken und schreibst doch nie wirklich konkret was dich stört..
 
> Eigentlich wollte ich nur den schon vorhandenen JFileChooser ...

und eigentlich ist es von Anfang an immer nur eine Zeile:
Datei x soll ausgewählt sein:
-> fc.setSelectedFile(neues file .. richtiges Verzeichnis .. + Dateiname);

ist eine Zeile wirklich zuviel?,
du machst dir so viele komplizierte Hintergedanken und schreibst doch nie wirklich konkret was dich stört..

ja nee - ganz so einfach is' das eben nich'

dein Vorschlag funktioniert nur, wenn die Datei schon existiert. Aber gut: ich erzeuge ein File-Objekt und wenn die Datei noch nicht existiert erzeuge ich sie.

und denn kommt der zweite Teil - die mögliche Umbennung - der aber relativ einfach zu handhaben ist; denke ich (noch)

Pepe
 
> dein Vorschlag funktioniert nur, wenn die Datei schon existiert.

nun gut, das ist eine feste Aussage,
ich hoffe du hast gut getestet, und beziehst dich nicht auf andere Verfahren wie anfangs genannt 'im Konstruktor als Parameter übergeben',
bei mir gehts, Windows zu Linux könnte einen Unterschied machen,
 
> dein Vorschlag funktioniert nur, wenn die Datei schon existiert.

nun gut, das ist eine feste Aussage,
ich hoffe du hast gut getestet, und beziehst dich nicht auf andere Verfahren wie anfangs genannt 'im Konstruktor als Parameter übergeben',
bei mir gehts, Windows zu Linux könnte einen Unterschied machen,

unter Linux funktioniert folgender code:
Java:
File file = new File("/absoluterPfad/dateiName");
    if (file.exists() == false) {
        try {
            file.createNewFile();
        } catch (Exception excpeption) {
            excpeption.printStackTrace();
        }
    }
JFileChooser fileChooser = new JFileChooser(file);
fileChooser.setSelectedFile(file);

und wenn ich den Dateinamen im entsprechenden Feld ändere und speicher bekomme ich ein anderes File-Objekt zurück. Jetzt muss ich nur noch die Datei löschen, wenn sie nicht vorhanden war aber eine andere Datei gespeichert wurde ...

unschön ist nur, dass zwischendurch diese Datei wirklich existiert

vielleicht hat ja jemand ne' bessere Idee ...
 
Zuletzt bearbeitet:

Zurück
Oben