Dostep do plikow umieszczonych w pliku JAR

0

Witam !!

Mam taki problem. Tworze aplikacje poprzez Eclipse RPC. W jednym z pluginow mam katalog z plikami XML w ktorych znajduja sie ustawienia konfiguracyjne dla poszczegolnych modulow aplikacji. I teraz gdy chce sie dostac do tych plikow, a plugin jest spakowany do JARa to otrzymuje null. Jezeli robie to na zwyklym katalogu wszystko dziala.
Ponizej kod odpowiedzialny za podawanie sciezni do katalogu:

IPath templatesPath = Activator.getPluginPath().append("rescat");
File templatesDir = templatesPath.toFile();

To jest fragment metody ktora zwraca mi sciezke do odpowiedniego katalogu. I teraz pobieram z tego katalogu wszystkie pliki z rozszerzeniem .tpl

arr = templatesDir.listFiles(new FileFilter(){
public boolean accept(File pathname) {
if (pathname.isFile() && pathname.getName().endsWith(".tpl"))
return true;
return false;
}
});

I teraz w momencie kiedy plugin jest w pliku JAR a wraz z nim i katalog rescat to metoda listFiles zwraca null w przypadku gdy plugin nie jest spakowany wszystko dziala ok.

Ktos moze wie jak mozna ten problem rozwiazac ??

0

JAR to ZIP, wiec przy pomocy ZipFile mozesz sie dostac do zawrtosci.

0

Jar znajduje sie w classpath, a wiec wszystkie pliki w nim sa dostepne poprzez metode getResource(). Mozesz zrobic np tak:
klasazjara.class.getResource (zwraca url) albo getResourceAsStream zwraca strumien
teraz mozesz sobiw wczytac czyli np sprasowac domem te xml jak chcesz
zapoaznaj sie z api i parametrami do tych metod
pozdrawiam

0

Ok ale co w przypadku gdy nie znam nazw tych plikow XML ?? Czy jest jakas metoda ktore przeskanuje mi dany katalog ?? Bo generalnie zalozenie jest takie ze w katalogu beda sie znajdowac pliki XML (liczba dowolna) ktorych nazwa bedzie nazwa snippetu wykorzystywanego w aplikacji. Wiec jak moge przeskanowac i pobrac wszystkie pliki z danego katalogu w JAR ??

0

w takim wypadku musisz sie posluzyc ZipInputStream i analizowac wszystkie Entry z danego katalogu i wybierac tylko te interesujace cie. O tym jak czytac zipa to juz znajdziesz mnostwo na sieci.

0

Dzieki pikseloza. Twoja rada pomogla :). Ale nadal mam problem. Potrafie juz czytac pliki XML z jara ale tylko pliki o znanej mi nazwie. Uzywam klas JarFile i JarEntry. JarFile odwoluje sie do pliku jar, za pomoca metody entries() moge wyszukac i przeczytac wszystkie pliki z glownego katalogu jara, ale nie mam pojecia jak dostac sie do plikow w podkatalogu ?? JarFile.entries() zwraca mi liste plikow z glownego katalogu jara, a moje templaty sa w podkatalogu templates/ do ktorego nie moge sie dostac z klasy JarEntry. Nie ma tam metody do przeszukiwania katalogow ?? Czy w ogóle jest mozliwe odczytanie zawartosci podkatalogu z archiwum jar ??

0
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class Test {

    public static void main(String[] args) throws IOException {
        ZipFile zip = new ZipFile(new File("c:/test.zip"));
        Enumeration<? extends ZipEntry> entries = zip.entries();
        while (entries.hasMoreElements()) {
            ZipEntry entry = entries.nextElement();
            if (entry.getName().startsWith("test/templates/") && !entry.isDirectory()) {
                System.out.println(entry.getName());
            }
        }
    }

}

ten kod u mnie wypisal:
test/templates/template1.txt
test/templates/template2.txt

Wiec za pomoca takiego ifa sobie sprawdzasz entry ktore chcesz miec i juz. A co dalej z takim entry sobie zrobisz to juz nie wiem, nie korzystalem z tego nigdy.

0

Super !! Dzieki pikseloza to rozwiazalo moj problem calkowicie :). Po wczytaniu odpowiednich entry z jara wyciagam z nich InputStream getInputStream(jarEntry) i nastepnie parsuje zawarte w nich XMLe :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1