Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren

SyntaxTalksToMe

Bekanntes Mitglied
Guten Abend,

wie der Name schon sagt, möchte ich gerne eine Image Datei, die ich über den FileChooser auswähle in das Projekt Verzeichnis kopieren. Von der Herangehensweise, hab ich das Gefühl, alles bedacht zu haben. Wenn ich es in der laufenden App probiere, kommt auch keine Exception. Es passiert aber auch nichts. Hier ist der Code:

Code:
FileChooser filechooser = new FileChooser();

        File file = filechooser.showOpenDialog(null);
        File dest = new File("@File:\\src\bilder");

        if (file != null) {

            try {
                Files.copy(file.toPath(), dest.toPath(), StandartCopyOptions);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

Zu meiner Denkweise:

Ich wähle das File über den Filechooser aus, welches dann in file gespeichert wird. Das File dest soll angeben, wohin die neue Datei kopiert werden soll.

Ich habe ja die Maskierung im "File dest" in Verdacht^^.. Aber ich hatte mich da an die Dokumentation gehalten.


Vielen Dank im Voraus
 
Sicher, dass "@File:\\src\bilder" ein valider Pfad ist? (Bzw, ist er durch das '\b' in jedem Fall nicht, das @FiLe sieht aber auch komisch aus...)

"bilder" ist auch vermutlich ein (existierendes) Verzeichnis - dein Bild soll vermutlich in dieses Verzeichnis kopiert werden, und es nicht ersetzen (je nach CopyOptions), du müsstest also einen Pfad innerhalb dieses Ordners angeben.
 
Ich hab grad geguckt. Es hatte bei mir sogar schon funktioniert. Er brachte eine Exception, dass das Bild an der besagten Stelle schon existiert. Allerdings wurde mir nichts im Projekt Folder angezeigt. Aber ich hab mal den Workspace geöffnet und reingeschaut und sah tatsächlich das Bild. Es wurde kopiert.

Ich hätte aber gerne, dass es auch in dem Project Folder angezeigt wird. Ich hatte auch mal Eclipse geschlossen und wieder geöffnet.
Es ist zwar im Ordner bilder im Workspace,aber nicht in der IDE in dem Ordner. Woran liegt das?
 
Hallo

es ist meine Schuld, dass mein voran gegangener Post aufgrund meines Doppelposts übersehen wurde. Ich würde gerne wissen, wo der Fehler in dem Path ist. Denn: Die Datei wird tatsächlich in meinen gewünschten Ordner kopiert. Allerdings sehe ich diese Datei nur, wenn ich den den Workspace aufmachen und dort in die Ordner reinschaue. In der IDE, wo sich der Ordner ja ebenfalls befindet, wird die Datei nicht angezeigt. Und ich habe den Pfad überprüft und erkenne da keinen Fehler

C:\Users\me\Pictures\main.PNG -> \src\bilder\main.PNG

Ich habe den Code nochmal abgeändert und hatte den Fehler den mrBrown angesprochen hatte gefunden im Pfad.

Code:
FileChooser filechooser = new FileChooser();

        File file = filechooser.showOpenDialog(null);
        File dest = new File("src/bilder/", file.getName());

        if (file != null) {

            if (!dest.exists()) {

                try {
                    Files.copy(file.toPath(), dest.toPath(), StandardCopyOption.COPY_ATTRIBUTES);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
 
Ich gebe zu, ich hätte mir ein Lösungsvorschlag erhofft. Aber ich verstehe natürlich dass du mir vermitteln möchtest, selbst danach zu suchen, da so der Lerneffekt größer ist.

Ok das hab ich getan. Ich hab das Problem verstanden und auch eine Lösung.

Und zwar habe ich jetzt dem Build Path den Ordner hinzugefügt, wo die Bilder eingespeichert sind.
Da mein Anspruch es ist, sauber und gut zu programmieren, jetzt meine Frage an euch Fachleute:

Ist das eine saubere Lösung? Oder eher ein Notbehelf für Leute die es nicht besser wissen.
 
Kommt drauf an, was du machen möchtest.

Den Build-Path und das src-Verzeichiss, gibt es halt nur zur "Programmierzeit", wenn dein Programm fertig ist, existieren die nicht mehr.
 
Aha. Interessant. Sry, das ist jetzt mein erstes Java Projekt. Falls ein paar Fragen seltsam erscheinen 🙂

Also eher weniger erstrebenswert. Was wäre denn ein guter Weg? Im fertigen Programm sollen dann auch noch Bilder hinzugefügt oder gelöscht werden können.
 
Ich gebe zu, ich hätte mir ein Lösungsvorschlag erhofft. Aber ich verstehe natürlich dass du mir vermitteln möchtest, selbst danach zu suchen, da so der Lerneffekt größer ist.
In dem Fall war das noch nicht einmal beabsichtigt; ich dachte, das wäre klar.

Was wäre denn ein guter Weg? Im fertigen Programm sollen dann auch noch Bilder hinzugefügt oder gelöscht werden können.
Das ist kein guter Weg. Wieso sollte ein Benutzer zum Programm Ressourcen hinzufügen können?
 
Wenn sich beispielsweise Pläne ändern. Mir stellt sich eher die Frage, warum ein Benutzer es nicht ändern sollte? Das ist nämlich eine Kern Funktion in dem was ich vorhabe.

Ja, es ist kein guter Weg. Was wäre denn ein guter Weg?

Ich möchte über einen FileChooser ein Image auf dem Computer auswählen können, dass anschließend an einer Stelle gespeichert wird, vorzugsweise da, wo das Programm installiert ist.

Eine Datenbank hält die Pfade zu den Bildern(die dann innerhalb der Application gespeichwert werden sollen). Und über einen Slider und dessen Index wird entsprechend des Indexes das richtige Bild in einem ImageView angezeigt. An diese Bilder sind noch andere Dinge gekoppelt. Da ich das ganze modular und dynamisch aufbauen möchte, ist es wie bereits gesagt erforderlich, dass der Nutzer Bilder hinzufügen oder löschen kann...
 
Zuletzt bearbeitet:
Mir stellt sich eher die Frage, warum ein Benutzer es nicht ändern sollte? Das ist nämlich eine Kern Funktion in dem was ich vorhabe.
Stell Dir mal eine .EXE-Datei vor, die enthält ebenso Ressourcen und wird auch nicht geändert, nur weil der Benutzer ein Bild hinzufügt.

Ich möchte über einen FileChooser ein Image auf dem Computer auswählen können, dass anschließend an einer Stelle gespeichert wird, vorzugsweise da, wo das Programm installiert ist.
Das ist etwas völlig anderes, denn hier fügst Du keine Ressourcen zum Programm hinzu, sondern legst einfach Daten im Dateisystem ab, was natürlich problemlos möglich ist. Allerdings willst Du die Dateien nicht (zumindest nicht automatisch/standardmäßig) dort speichern, wo das Programm installiert ist, denn auf das Verzeichnis hat der Benutzer oftmals keinen Zugriff.

Als Benutzer würde ich erwarten, dass ich mir den Speicherort aussuchen kann, z. B. bei der Installation oder in den Programm-Optionen. Du kannst solche Einstellungen mit Hilfe der Preferences API verwalten (https://docs.oracle.com/javase/8/docs/api/java/util/prefs/Preferences.html)

Alternativ kann man den Speicherort beim Aufruf des Programms mitgeben, als Parameter, System-Property bzw. Umgebungsvariable. Möglichkeiten gibt es genug.
 

Neue Themen


Zurück
Oben