[Java] Probleem met padnamen in property file

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 22:59

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Ik heb een probleem met het lezen van padnamen uit 1 van mijn property files.

Property inhoud:
code:
1
basic.outputlocation = h:\temp\sma


Zodra ik de property inlees met de methode getProperty() is het resultaat h: <tab> empsma.

De h: <tab> is volkomen te begrijpen aangezien \t een tab is. Alleen dat \s niet correct wordt verwerkt is voor mij niet te begrijpen, ik had in dit geval verwacht dat deze 1:1 zou worden overgenomen c.q. genegeerd.

Ik wil dat een gebruiker gewoon standaard windows padnamen op kan geven als h:\temp\sma oid. En ik wil de gebruiker niet op moeten zadelen met dubbele slashes of forward slashes.

De programmatuur komt alleen maar op Windows based machines te draaien aangezien de files die ik inlees alleen van software afkomen die op Windows draaien. Platform onafhankelijk zijn is voor dit hobbyproject niet interessant.

Op Google kan ik hier zo 1 2 3 niet veel over vinden. hoe dit op te lossen is.

Is er iemand die hier een oplossing voor heeft?

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

De \ is in deze context een escape teken en maakt dus ook geen onderdeel uit van de daadwerkelijke waarde. Hij wordt dus inderdaad genegeerd waardoor de \ wegvalt. Je zult gewoon elke \ moeten escapen door er \\ van te maken.

Het zou trouwens ook een stuk lastiger zijn wanneer een \ enkel een escape teken was wanneer er wat van te maken viel. Dan zou het escapen een stuk lastiger zijn aangezien je elk mogelijk escape teken zou moeten weten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • bredend
  • Registratie: September 2001
  • Laatst online: 18-09 21:45
code:
1
basic.outputlocation = h:\\temp\\sma


Zo werkt het wel.

Acties:
  • 0 Henk 'm!

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 22:59

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
bredend schreef op zaterdag 11 juli 2009 @ 22:55:
code:
1
basic.outputlocation = h:\\temp\\sma


Zo werkt het wel.
Klopt en met c:/temp/sma werkt het ook prima

Voorlopig heb ik nog geen frontend / config tool om mijn tool te beheren en de mensen die m'n tooltje nu gebruiken vinden die \\ nogal verwarrend.

Daarnaast heb ik ook een csv file waar ik informatie uit haal, hier staan ook paden in, hier kan ik wel netjes het pad in c:\temp\sma uithalen, hierin wordt wel de \s genegeerd. Ik gebruik voor het lezen van deze CSV file een aparte library ( CSVtool.1-8. )

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Acties:
  • 0 Henk 'm!

  • pipo1000
  • Registratie: December 2004
  • Laatst online: 19-09 14:46
of gewoon;

basic.outputlocation = h:/temp/sma

Want Java is ongevoelig voor / of \ op alle platforms!

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

\s is dan ook geen entity, \t wel :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

pipo1000 schreef op zaterdag 11 juli 2009 @ 23:20:
of gewoon;

basic.outputlocation = h:/temp/sma

Want Java is ongevoelig voor / of \ op alle platforms!
Dit is niet waar. Dit is platformafhankelijk. Windows accepteert inderdaad zowel / als \, maar de Unix derivaten (Unix, Aix, Linux, Mac, etc) accepteren alleen de /.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 19:49
Je zou nog een ander truukje kunnen gebruiken. Als je in je .properties bestand toch geen gebruik gaat maken van escapes, schrijf dan een eigen klasse die is afgeleid van FilterInputStream en die het escapen doet tijdens het inlezen van het bestand.

In plaats van de 'kale' InputStream, geef je de load() functie je eigen afgeleide klasse mee, die in zijn read() functies extra backslashes toevoegt.

En als je gebruik maakt van FileReader, moet je switchen naar FileInputStream.

Als alternatief kun je ook gebruik maken van FilterReader.

:)

[ Voor 40% gewijzigd door Jaap-Jan op 12-07-2009 08:50 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett

Pagina: 1