2011-01-24 19 views
10

Mam duży problem z robieniem czegoś naprawdę głupiego. To znaczy otwórz strumień do pliku zasobów w moim folderze META-INF. Pracuję nad narzędziem jar i na tym:nie można odczytać pliku z META-INF

InputStream schemaIS = this.getClass().getClassLoader().getResourceAsStream("/META-INF/schema.xsd"); 

Po prostu uzyskać zerowy! Projekt jest zbudowany przy użyciu maven, a plik xsd kończy się w folderze META-INF, ale nadal nie działa.

Czego nie rozumiem, to teoria, która za tym stoi? W jaki sposób ClassLoader wykonuje wyszukiwanie w systemie plików? Jak mogę dostać się do pliku?

+3

jest to aplikacja internetowa? – Bozho

Odpowiedz

23

spróbuj usunąć pierwszy ukośnik:

InputStream schemaIS = this.getClass().getClassLoader().getResourceAsStream("META-INF/schema.xsd"); 

Trzeba wiodącą ukośnik jeśli wywołanie metody getResourceAsStream na Class obiektu. Na obiekcie ClassLoader ścieżka jest zawsze absolutna, a wiodący ukośnik nie jest konieczny.

+0

jeśli jest to zwykły META-INF, który znajduje się w katalogu głównym ścieżki klasy, wymagany jest wiodący ukośnik. – Bozho

+2

@Bozho prowadzące ukośnik jest potrzebny, jeśli wywołujesz metodę getResourceAsStream na obiekcie klasy, a nie na module ładowania klas. – dogbane

+0

jest _nie_ wymagane, jeśli wywołuje się moduł ładujący klasy, ale z pewnością nie robi różnicy. Tym, co robi 'class.gerResourceAsStream()', jest rozwiązanie ścieżki względem siebie, a następnie przekazanie jej do getResourceAsStream modułu klasyloader. – Bozho

2

spróbować tej ścieżki: META-INF/schema.xsd (pierwszy / pominięte)

Powiązane problemy