Leerzeichen in Pfad...

PissPain

Aktives Mitglied
Hallo,
ich versuche ein Programm in Java zu starten, doch habe ich ein Problem.
Das Programm liegt in einem Verzeichnis, das ein Leerzeichen beinhaltet (My Documents).
Ich habe schon viel ausprobiert, doch hat nichts geklappt…

"\"My Documents/Programs/Programm.command\"" sah ich schon ziemlich oft, aber bringt nichts.
Java liest den Pfad einfach nur bis "My" durch und kann das Programm deshalb nicht starten.

Ich hoffe ihr kennt euch damit gut aus und könnt mir eine schnelle einfache Antwort geben 🙂
Also nicht das ich gleich was ausprobieren soll, was eh nicht funktioniert (wäre trotzdem dazu bereit).

Vielen Dank 🙂
 
Ich vermute mal du liest den Pfad von der Kommandozeile? Denn der Konstruktor von [JAPI]File[/JAPI] hat damit kein Problem.

Auf der Kommandozeile (sowie in UNIX als auch DOS) ist es so, dass die Argumente durch Leerzeichen getrennt werden. Soll nun ein Argument ein Leerzeichen enthalten, muss es durch
Code:
"
am Start und am Ende markiert werden:

Code:
Kommandozeile:
java Test arg1 arg2 arg3

3 Parameter an main(String... args):
["arg1", "arg2", "arg3"]


Kommandozeile:
java Test arg1 "arg2 arg3"

2 Parameter an main(String... args):
["arg1", "arg2 arg3"]

P.S.: Soll ein Argument ein
Code:
"
enthalten, muss es, wie in Java auch, escaped werden. In UNIX ist
Code:
\
das Escape-Zeichen, in DOS
Code:
^
:
Code:
DOS:
C:\>java Test arg1 "arg2^"arg3"

UNIX:
root@unix:~$ java Test arg1 "arg2\"arg3"
 
Ich zeig dir wie ich das benutze:
Java:
Runtime.getRuntime().exec("\"" + PATH + "build.command\"");

Also, nicht im Terminal, sondern im Java-Code.
Das "PATH" ist die Variable für "/Users/user/Documents/My Documents/Programs/", bloß hab ich halt das Problem mit dem Leerzeichen.

Aber egal was ich probiere, es wird immer eine Exception geworfen, die mir sagt, dass ich das Programm "/Users/user/Documents/My" nicht öffnen kann.

Vielen Dank.

EDIT: Das Gleiche mit der Instanz von "File" lässt die gleiche Exception erscheinen.
 
Zuletzt bearbeitet:
Der Aufruf von [JAPI]Runtime#exec[/JAPI] ist exakt das gleiche wie wenn man den Parameter auf der Kommandozeile eingibt und ENTER drückt.
Was also bei DOS ankommt ist folgendes:
Code:
"/Users/user/Documents/My Documents/Programs/build.command"
. Das wird natürlich nicht gefunden, da fehlt der Laufwerksbuchstabe; oder aber das
Code:
/
aus [c]PATH[/code] ist zu viel und es handelt sich um einen relativen Pfad.
 
Zuletzt bearbeitet:
Der Laufwerksbuchstabe fehlt nicht, da ich an einem Mac arbeite.
Nun weiß ich aber nicht wirklich, was ich oder wie ich die Zeile schreiben soll.
 
Hm, was dein Mac OS da macht kann ich jetzt auch nichtmehr nachvollziehen. Probier das mal mit [JAPI]ProcessBuilder[/JAPI]:

Java:
ProcessBuilder pb = new ProcessBuilder("build.command");
pb.directory(new File('/' + PATH));
pb.start();
 
Warum arbeitest du eigentlich nicht mit
Java:
System.getProperty ("user.dir");

Hat das bestimmte Gründe?
 
Zuletzt bearbeitet:
Ich will es dem Benutzer ermöglichen, ein "Workspace"-Ordner auszuwählen.
Also darf so etwas nicht vorkommen, weil Niemand weiß, ob der Ordner Leerzeichen enthält.
 
Dann verstehe ich den Problem nicht,
Code:
JFileChooser
,
Code:
getSelectedFile();
und alles ist wunderbar.
 
Zuletzt bearbeitet:
Wenn ich mir eine Instanz von File durch
Java:
getSelectedFile();
liefern lasse, bringt das nicht viel mehr, als wie
Java:
new File("/Users/user/Documents/My Dokuments/Programs");

Noch mal: Mein Problem ist, dass wenn ich ein Programm durch Java öffnen will, es nicht geöffnet werden kann, da der Pfad als 2 Argumente anerkannt wird und dadurch dass das Programm nur ein Argument einliest, wird die andere Hälfte verschluckt.
Wie schaffe ich es, dass der Pfad als Ganzes angenommen wird??
Und noch mal, nicht in der Konsole, sondern im Java-Code (Ich hab ja schon ein Beispiel gepostet).

Und falls es immer noch nicht gelöst werden kann, dann liegt es wahrscheinlich im Zusammenspiel von Java und OS X (Normalerweise bin ich sonst auch an einem Windows-PC, aber nun wollte ich mal was anderes benutzen).

Vielen Dank.
 
Poste doch bitte mal den genauen Pfad, ich versteh dein Problem nicht ..... wenn du ein Leerzeichen zwischen der eingabe hast

dann kannst du entweder einen StringBuilder nutzen oder per + Operator (concat()😉 dieses in deinem String hinzufügen

Java:
String path = System.getProperty("user.dir") + "/Programms/" + "Mein Ordner/"; 
// oder 
String path = System.getProperty("user.dir") + "/Programms/" + "Mein" + " " + "Ordner/"; 
//oder
StringBuilder builder = new StringBuilder(System.getProperty("user.dir");
builder.append("/Programms/Mein Ordner/");
 
Zuletzt bearbeitet:
Ok, den String richtig zusammen zu stellen, ist jetzt nicht das Problem.
Also, ich bekomme den String als Ganzes, aber das hier
Java:
Process pro=Runtime.getRuntime().exec(new File("\"/Users/user/Documents/My Documents/Programs/build.command\""));
wird nicht als Ganzes anerkannt.

Also nicht ich habe das Problem, dass es ein Leerzeichen in sich trägt, sondern die Methode, der ich den Pfad mit dem Leerzeichen als Parameter übergebe.
Ich will halt nur eine Lösung finden, damit die Methode den Pfad als Ganzes benutzt.

Das hier:
Java:
Process pro=Runtime.getRuntime().exec(new File("\"/Users/user/Documents/My Documents/Programs/build.command\""));
ist das Gleiche wie das hier:
Java:
Process pro=Runtime.getRuntime().exec(new File("\"/Users/user/Documents/My\""));

Ich will nur, dass die Methode den Pfad als Ganzes benutzt.

Vielen Dank.
 
Dabei wird aber die gleiche Exception geworfen.
Ich denke mal, dass es hoffnungslos ist, da nichts hilft, das System will den Pfad einfach nicht als Ganzes anerkennen, egal was man macht.

Eigentlich muss es eine Lösung geben, ich meine ja, nur wegen einem Leerzeichen im Pfad, will ich mein Projekt nicht abbrechen und es wäre ziemlich komisch, gebe es dafür keine Lösung.
 
Jetzt wird's mies:
Nach sehr vielen Versuchen habe ich es endlich geschafft. Es ist ziemlich komisch, verstehe es immer noch nicht, aber wenn man mal kein Zeichen usw. setzt, funktioniert es einwandfrei 😀
 

Neue Themen


Zurück
Oben