Backslash-Problem

  • Themenstarter Themenstarter _-`avaj´-_
  • Beginndatum Beginndatum
A

_-`avaj´-_

Gast
Hallo,
ich habe folgendes Problem:

Ich will einen Dateipfad auslesen lassen (sprich mit einem File und .getPath()) und den dann in eine .properties-Datei speichern...
Ich hab das ganze mal mit dem Pfad "C:\" probiert aber bekomme in meine Properties "C\:\\" geschrieben...
Mir ist bewusst das der "\" ein Escape-Zeichen ist aber kann man das nicht irgendwie umgehen bzw. dafür sorgen dass der String so in die Properties geschrieben wird, wie er auch mit System.out.println() ausgegeben wird?

Danke schonmal im Voraus
_-`avaj´-_
 
Wenn du in deinen Properties
Code:
C:\
abspeichern willst, dann wird das zwangsläufig escaped, das kannst du nicht verhindern.
 
Wenns so gemacht wird, dann wirds so gemacht. Da kannst du nicht dran rumschrauben. Ist mir auch gerade erst vor wenigen Wochen aufgefallen, dass da [c]\:[/c] geschrieben wird 😀 .
Wieso benötigst du denn gewissermassen den String plain? Liest du ihn nicht später wieder so ein? Oder sollte es den Benutzer nicht verwirren? Wenn ja, probier mal, was noch eingelesen wird, nachdem die Zeile händisch auf ein "illegales" Format geändert wurde.
 
naja ... wenn es als "Properties" geschrieben wird dann hat die datei nun mal einem bestimmten aufbau zu folgen .. und ":" gilt in Properties nun mal als gültiger "Trenner" ... genau so wie "\" escaped werden muss ...
um also dem "Properties" standard zu folgen MUSS für "C:\pfad" im file später "C\:\\pfad" stehen ... ansonsten führt es zu parsing fehlern ...
wenn du das also nicht willst musst du dir selbst was schreiben ... aber Properties haben nun mal dieses fest definierte verhalten
 
@irgendjemand:
d.h auch in einer Properties-Datei sind : und \ Sonderzeichen die escaped werden müssen?
d.h wenn ich den String in eine andere Datei schreiben würde, also mit einem OutputStream, dann würde er mir das ganze auch richtig in diese Datei schreiben?
bzw. auch wenn er mir in die Properties Datei C\:\\ schreibt kann ich die Property mit .loadProperty("C\:\\"); wieder auslesen (Sprich der Pfad ist in dem Fall der Key)?
 
der backslash "\" ist so oder so ein meta-zeichen ... nämlich das sog. "Escape-Zeichen" ... und muss daher wenn man es "darstellen" will mit sich selbst escaped werden ...

der doppelpunkt ":" ist im "Properties" format halt ebenfalls ein gültiger "trenner" wie auch "=" ... und muss daher ebenfalls escaped werden ...

und der "key" ist das was auf der linken seite des trenners steht ...
 
OK!
Das der Key das linke ist weiss ich... aber die frage war ob ich das so wieder auslesen kann?
Sprich ich speicher irgendwas mit .setProperty("C\:\\", "bla"); und will das dann wieder auslesen... geht das?

bzw. auch wenn er mir in die Properties Datei C\:\\ schreibt kann ich die Property mit .loadProperty("C\:\\"); wieder auslesen (Sprich der Pfad ist in dem Fall der Key)?
 
warum sollte man einen verzeichnis-namen als "key" benutzen ?

eigentlich solltest du mit .getProperty("C:\\"); ran kommen ... den ":" musst du hier nicht escapen *da dieses escape beim einfügen in die Map<K, V> eh entfernt wird ... das escape des backslashes muss aber bleiben
 
Es ist ganz einfach:

Code:
C:/xxx/yyy
funktioniert wunderbar, wobei man sich C: sogar sparen kann
 
@trez:

THX!

Ich hab jetzt einfach vor das Schreiben in die Properties alle \ mit / ersetzt (was auch trickreich ist, da man .replaceAll("\\\\", "/"); schreiben muss) und dann speichert er mir alles mit / in die Properties, wobei / nicht escaped werden muss und ich kann den Pfad auch gleich so wieder als Dateipfad z.B. für ein File angeben ohne wieder die / durch \ zu ersetzen...

Danke für den Tipp 🙂
 

Neue Themen


Zurück
Oben