Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
EclipseJava Projekt funktioniert in Eclipse, aber nach export kein Dateizugriff
Ich habe ein seltsames Phänomen. Ich habe ein kleines Java-Programm geschrieben, welches Namensfragmente mit Tags in einer JSON-Datei speichen kann. Zur Eingabe des Namens und der Tags habe ich eine grafische Operfläche mit Swing erstellt.
Innerhalb von Eclipse funktioniert das Programm einwandfrei, außerhalb funktioniert es auch aber es kann nicht auf die folgende Datei zugreifen.
Java:
File jsonFile = new File("data/nameFragmentsGUI.json");
Und das ist der Code der die Datei prüft, die ersten 3 Zeilen sind eher testweise drin, haben das Problem aber auch nicht gelöst
Die Frage ist, was Du da genau machen willst. Wichtig ist, dass die Dateien deins Projekts nach dem export ja so nicht mehr zur Verfügung stehen. Dann sind die Dateien, die Deine Anwendung bilden, ja alle in der jar Datei. Und wenn Du die z.B. per Doppelclick startest, dann ist das Arbeitsverzeichnis oft nicht das Verzeichnis des jar Datei.
Daher ist jetzt erst einmal wichtig: Was willst Du genau erreichen?
- Du kannst die Datei beim jar File halten. Das ist aber evtl. ungünstig, denn Programme liegen ja oft in Verzeichnissen, auf die ein User keine Schreibrechte hat. Daher ist das nicht unbedingt zu empfehlen. Das kann man auch durchaus heraus bekommen, aber evtl. muss man da paar mehr Fälle berücksichtigen.
Das wäre dann etwas wie: getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
- Du kannst die Datei z.B. im Home-Verzeichnis des Users ablegen. Da hat der Anwender in der Regel Schreib- und Leserechte. Dazu hast Du auch schon fast den code - user.home wäre da die Property.
- Wenn eine Datei nur gelesen werden soll, dann wäre dies oft eine Ressource. Die wäre dann in der jar Datei mit drin und würde über die Klasse Class oder Classloader mit der Methode getResource oder getResourceAsStream lesen.
An sich wäre der Gedanke so (hab ich auch schon öfter erfolgreich so gemacht) das ich im Verzeichnis mit dem Runnable-Jar-File einen Ordner "data" habe und dort wird die Datei angelegt, sprich außerhalb des Classpath. bzw. der Jar Datei. Die Nutzer sollen auf die Datei zugreifen können.
Das Programm ist wirklich nur ein kleines Projekt das ich jetzt in 2 Tagen zusammengeschrieben habe.
Meine exportierte Ordnerstruktur sieht ungefähr so aus
OnlineNameFinder(Hauptordner) -> "OnlineNameFinderEingabe.jar" und Ordner "data" -> "nameFragmentsGUI.json"
Wobei die Datei "nameFragmentsGUI.json" wenn sie noch nicht existiert erstellt werden soll, siehe obiger Code. Sprich an sich könnte man auch das ganze Verzeichnis einfach in das Home-Verzeichnis legen.
Gibt es einen systemunabhägigen Pfad zum Nutzerverzeichnis? Ich selbst nutze Linux Mint, die meisten der Nutzer werden eher Windows verwenden.
Es wundert mich halt das es innerhalb von Eclipse einwandfrei geht, da habe ich den data Order auch außerhalb des src-Ordners.
Wenn Du das Programm aus Eclipse startest, dann ist das Arbeitsverzeichnis das Projektverzeichnis. Daher geht es. Aber wenn Du die jar Datei startest, dann ist das nicht gegeben. Daher probiere einmal den Code aus, den ich angedeutet habe. Damit solltest du den Pfad bekommen. Da kannst Du dann noch das data/nameFragmentsGUI.json anhängen.
Oder du wechselst auf das User-Verzeichnis und das bekommst du mit System.getProperty("user.home");
Die Beschreibung der einzelnen Properties findest Du unter System (Java SE 17 & JDK 17) (oracle.com)