29. januar 2003 - 08:49Der er
18 kommentarer og 1 løsning
Ressourcer i jar-fil!
Jeg har et program som er pakket i en jar-fil. Den vil ikke finde mine xml-filer som bruges til konfiguration. I NetBeans tilgår jeg filen ved getClass().getResource(); men når jeg pakker den i jar-filen uden for netbeans kan den ikke finde filen... hvad kan man gøre ved det?
Man kan selvfølgelig angive hele stien, men det holder ikke da programmet kal distribueres til mange andre computere som selvfølgelig ikke installerer i samme bibliotek allesammen.
Bare for at lave noget som jeg kan bruge til at rette det, har jeg lavet en funktion som skal skrive hvilket sted på harddisken programmet ligger:
URL home = getClass().getResource("."); System.out.println(home.toString());
Som sagt virker det i NetBeans, og den skriver det bibliotek hvor jeg har filerne liggende. Men når det er pakket ned, giver den en NullPointerException på toString-metoden. Højst sandsynlig fordi home-variablen er null, men hvorfor er den det?
Hvis din ressource ligger i: /resource/foobar.xml i din jar fil, så bør du kunne lave en: getClass().getResource("/resource/foobar.xml") eller en: getClass().getResourceAsStream("/resource/foobar.xml")
[den sidste er formentlig bedst, hvis du skal læse XML filen]
Før brugte jeg en File fil = new File("bibliotek"); for at finde alle filer som er .xml, men det fungerer ikke med en InputStream som man får med getResourceAsStream().
Jeg er bange for at du bliver nødt til noget i retning af følgende pseudo kode:
if this class is loaded from a jar fil { open jar file for each entry in jar file { if a resource { load resource } } close jar file } else { lookup directory for each file { if a resource { load resource } } }
Selve xml-filerne som slutbrugerne skal kunne redigere i, ligger selvfølgelig heller ikke i jar-filen, men for at finde ud af hvor de ligger, nemlig i et bibliotek i programmets rod-bibliotek, bliver jeg nødt til at finde ud af hvor brugeren har lagt programmet.
Men jeg tænker på en løsning hvor brugeren af programmet skal angive hvor hans xml-filer ligger, og så smidder jeg det ned i en xml-fil. Så er de jo ikke noget problem at få fat på.
Jeg læste spm287997, og det virkede fint! I mellemtiden har jeg så fundet ud af at det også virker fint hvis jeg bare skriver en relativ sti. Hvis jeg fx skal have fat i en data.xml, som ligger i samme bibliotek som mit program, kan jeg bare skrive File data = new File("data.xml"). Grunden til at jeg ikke brugte det fra starten var at det ikke virkede i NetBeans, men det virker altså fint i den "virkelige verden".
Som sagt så var det arne_v's link der egentlig viste mig det jeg skulle bruge, så det må være ham der får pointene...men også tak for hjælpen til jer andre...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.