2009-05-09 14 views
5

Czy jest możliwe aby dodać katalog względny (czyli foo/bar/plugh) do ścieżki klasy java i używaćdodanie względną katalogu Java ścieżce klas i przy użyciu ClassLoader(). GetResourceAsStream ("")

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); 

Aby pobrać foo/bar/plugh/xyzzy.properties?

Moja ścieżka klasy wygląda następująco:

foo.jar;foo/bar/plugh;xyz.jar 

I jestem w stanie użyć klas i zasobów zarówno foo i xyz słoików ale nie z katalogu plugh. W takich przypadkach in ma zawsze wartość NULL.

Nie mogę tego uruchomić i nie jestem pewien, czy jest to po prostu nieobsługiwane, brakuje mi czegoś subtelnego lub czy robię coś nie tak. Czy muszę używać bezwzględnej ścieżki?

+0

Jak ustawić tę ścieżkę klas? Podobnie jak w poniższym przykładzie? java -classpath foo.jar; foo/bar/plugh; xyz.jar –

Odpowiedz

6

Może nie rozumiem, co próbujesz zrobić, ale jeśli masz folder w ścieżce klas, oznacza to, że wszystkie pliki znajdujące się pod nim powinny znajdować się również w ścieżce klas. Jeśli nie, zawsze możesz przekazać każdy plik .properties na ścieżce klasy.

Ale tak czy inaczej, ponieważ plik/folder, który zawiera plik jest w ścieżce klasy, należy po prostu być w stanie to zrobić:

InputStream in = new FileInputStream("classpath:xyz.properties") 

A ponieważ „foo/bar/plugh” jest w ścieżce klasy , jedno z miejsc, w którym będzie szukać xyz.properties, znajduje się w "foo/bar/plugh".

+0

Z jakiegoś powodu nie działa to dla mnie, gdy moja aplikacja działa przez plik wsadowy zbudowany przez codehaus maven appassmebler. Ścieżki bezwzględne działają, ale względne nie. – sal

+2

Jedyne, co mogę wymyślić, to to, czy ścieżka względna, którą masz w swojej ścieżce klasowej, jest rozwiązywana na podstawie miejsca, w którym program jest uruchamiany. Na przykład, jeśli mam plik wsadowy w katalogu C: \ myapp \ bin, ścieżką "podstawową" może być C: \ myapp \ bin, a nie C: \ myapp. W takim przypadku próbowałoby rozwiązać "C: \ myapp \ bin \ foo \ bar \ plugh \ xyz.properties". –

+0

To działało dla mnie z absolutną ścieżką katalogu. Ale to jest bardzo dziwne, ponieważ próbowałem wcześniej z kodem: InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); Jaka jest różnica między tymi dwoma metodami? Dzięki. –