Java Ordner öffnen?

4 Antworten

Ja, so wird sich ein Explorer-Fenster öffnen. Wie du bei der roten Linie aber schon siehst, hast du dort ein Fehler. Dir fehlt ein "+" nach der username Variable. Die Exception könntest du noch genauer definierten. Wenn bei deinem jetzigen catch eine andere Exception auftreten würde (z. Bsp. eine NullPointer), würde diese auch gefangen werden. Desktop.getDesktop().open() wirft eine IOException. Dies könntest du im catch somit noch genauer definieren.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung

Janik400 
Beitragsersteller
 22.08.2021, 13:54

Das mit dem Plus habe ich verstanden... Den Rest nicht wirklich. Anscheinend ist das ein naja schlechter befehl oder so und der wirft fehler raus? Sry für die formulierung hab gestern abend mit Java angefangen :D

0
Lezurex  22.08.2021, 13:58
@Janik400

Es gibt viele verschiedene Exceptions, die auf verschiedene Fehler hinweisen. In deinem catch-Block hast du einfach nur die Exception Klasse angegeben. Das ist die Klasse, wovon alle anderen Exceptions erben.

Wenn also jetzt innerhalb deines try Blockes eine andere Exception auftritt, etwa eine NullPointerException, dann wird diese auch aufgefangen und dein Programm läuft weiter, obwohl es das dann nicht sollte.

Daher solltest du in deinen catch-Block die Exception so spezifisch wie möglich angeben. In deinem Fall wäre dies dann eine IOException.

0

Was meinst du damit, einen "Ordner zu öffnen"? In deinem Beispiel wird wahrscheinlich der Explorer aufgehen - dein Code funktioniert sowieso nur auf Windows.

Das Homedirectory eines Benutzers - zumindest jenes, das hier gemeint ist, denn unter Windows ist der Begriff nicht sehr klar definiert - bekommst du mit

System.getProperty("user.home")

Wenn du einen kompletten Pfad daraus bauen willst:

Path mcPath = Path.of(System.getProperty("user.home"), "AppData", "Roaming", ".minecraft");

Die Methode .toFile() wandelt das dann in ein File-Objekt um, wenn du das wie oben verwenden willst.

(Auch das wird aber natürlich nur auf Windows funktionieren, denn dieses Gemurks mit AppData/Roaming gibt es nur auf Windows. Eine plattformübergreifend funktionsfähige Applikation sollte zumindest überprüfen, ob es .minecraft nicht eh direkt im Homedirectory gibt - und danach die Umgebungsvariable APPDATA o.ä. probieren.)

1.) Wie @JanMarcel01 schon geschrieben hat, fehlt nach dem "username" ein weiteres +.
Ohne dieses + wird "username "\\AppData....." nicht zusammengehängt.
Das sollte Dir aber auch die Fehlermeldung sagen, die Du deswegen bekommst.

2.) Hat nichts mit dem Fehler zu tun, aber
Du solltest Dir angewöhnen bei Exceptions nie einfach "Exception" abzufangen,
sondern nur die Fehler, die Du abfangen möchtest.
So wie Du es machst wird jedlicher Fehler über Dein Catch abgefangen (und es wird nichteinmal eine Meldung ausgegeben oder sonst irgendetwas gemacht, was noch schlimmer ist).
Das funktioniert zwar, ist aber sehr dreckig programmiert.

Woher ich das weiß:Studium / Ausbildung – Informatik Studium.

Janik400 
Beitragsersteller
 22.08.2021, 13:57

Zu 2. Wie mache ich es besser? Habe das in einem Yt tutorial gesehen habe gestern abend mit Java angefangen ;D

0
apophis  22.08.2021, 14:15
@Janik400

Ohje, dann schau mal lieber nach besseren Tutorials.

Man will eigentlich nur die Exceptions fangen, die auch geworfen werden können.
Heisst, wenn Du versuchst etwas einzulesen und dadurch eine NullPointer Exception entstehen könnte (bspw. wenn die Datei nicht existiert),
dann willst Du keine ArrayIndexOutOfBound Exception abfangen, sondern eben nur den Nullpointer.

Alle Fehler abzufangen funktioniert wie gesagt zwar in Deinem Fall,
in anderen kommt es aber zu fehlern udn es ist allgemein einfach sehr unschön so zu arbeiten.
Sobald Du bspw. zwei Fehler unterschiedlich behandeln willst, funktioniert das schon nicht mehr, weil über "Exception" alle Fehler abgefangen werden.

Zudem macht Dein Exception Catch garnichts (Die geschweiften Klammern sind leer).
Das bedeutet wenn tatsächlich ein Fehler auftaucht (bspw. wenn der Ordner nicht existiert), dann macht Dein Programm garnichts.
Und viel schlimmer -> es sagt Dir auch nicht, dass es einen Fehler gegeben hat.

Bei Exceptions solltest Du immer mindestens den Error Log ausgeben,
damit Du bei der Entwicklung auftretende Fehler sehen kannst.

Tipp: Eclipse, Visual Code und andere übliche Entwicklungsumgebungen haben die Möglichkeit ein Try/Catch automatisch zu erstellen, wenn es nötig ist.
Dabei wird gleich die richtige Exception abgefangen und im Catch standardmäßig ein Error Log ausgegeben.

Bei einem fertigen Programm könnte ein Catch so aussehen, dass sich ein Dialogfenster mit einer Fehlermeldung öffnet,
("Fehler, der angegebene Ordner wurde nicht gefunden" o.Ä.)
damit der Benutzer auch weiss, dass etwas schiefgelaufen ist und sich nicht wundert warum das Programm nicht macht, was es soll.

0
Janik400 
Beitragsersteller
 22.08.2021, 13:55

"Syntax error on token ""\\AppData\\Roaming\\.minecraft"", delete this token"
Das ist der Fehlercode aber danke für die Antwort :D

0
apophis  22.08.2021, 13:59
@Janik400

Syntax Error -> falsche Syntax. Ist ja genau der Fehler. :)

0

Hey,

da fehlt ein „+“, dieses brauchst du, wenn du Steings aneinander hängst (konkatenierst).

Mfg Jannick (L1nd)

Woher ich das weiß:Hobby