Strona 1 z 1

ścieżka do pliku

Napisane: piątek, 23 października 2009, 15:21
przez rhymie
Witam,

zna ktoś z Was sposób jak uzyskać ścieżkę do programu uruchomionego z rozszerzeniem .jar ?

Chodzi mi o dynamiczne pobranie ścieżki do pliku i otworzenie innego pliku w tym samym katalogu.


Dodam tylko, że

Code: Zaznacz cały

URL dirUrl = Formatka.class.getResource("./");
nie działa mi do pliku .jar


Pozdrawiam
rhymie

Re: ścieżka do pliku

Napisane: piątek, 23 października 2009, 16:36
przez Morfidon
Witam,

Hmm?? plik z rozszerzeniem .jar to jest zwykłe archiwum takie jak .zip, tyle że ma dodatkowo trochę więcej informacji. Ścieżkę do pliku możesz pobrać przy pomocy np. klasy File. Wykorzystaj funkcję wypiszsciezki(), która jest napisana w 1 lekcji Video Kursu Java - Strumienie. Proponuje wykorzystać klasę String, która pomoże wyszukać pliki z rozszerzeniem .jar z listy dostępnych ścieżek.

Więcej o Jar i specjalnej dla niej klasy możesz przeczytać tutaj:
http://javaworkshop.sourceforge.net/cha ... troduction

Pozdrawiam,

Arkadiusz

Re: ścieżka do pliku

Napisane: sobota, 24 października 2009, 18:15
przez rhymie
Może inaczej napisze co miałem na myśli:
Zrobiłem sobie program i plik konfigurracyjny który jest w tym samym katalogu co mój program.
Zrobiłem z nich paczkę .jar.
Teraz ten program odpaliłem przez java -jar plik.jar.
No i program ładnie widzi plik konfiguracyjny.

Problem jest dopiero wtedy gdy mój program uruchamia się z innego programu, wtedy zmienia się katalog domyślny i pliku konfiguracyjnego już nie widzi.
Więc wymyśliłem sobie, że program będzie pobierał ścieżkę do tego mojego programu już uruchomionego i w nim szukać owego pliku konfiguracyjnego.

hmmm, a może ten mój problem da się jakoś inaczej rozwiązać.

pozdrawiam,
rhymie

Re: ścieżka do pliku

Napisane: niedziela, 25 października 2009, 02:02
przez Morfidon
nie rozumiem, skoro jest uruchomiony plik .jar z innego programu to musiałeś mieć do niego ścieżkę z tego innego programu...

Re: ścieżka do pliku

Napisane: niedziela, 25 października 2009, 11:30
przez rhymie
zgadza się,
bo w zmiennej systemowej Path ustawiłem ścieżkę do mojego programu i odpalam go normalnie bez podawania już ścieżki.
Jednak ten mój program uruchomiony z innego programu już nie widzi pliku konfiguracyjnego ( który jest w tym samym katalogu co program).

Mój wniosek jest taki, że zmienia się katalog domyślny dla uruchomionego programu i dlatego nie widzi tego pliku konfiguracyjnego.
Dlatego szukam sposobu aby wypisać ścieżkę do mojego programu i tym samym do pliku konfiguracyjnego.

Wypisanie ścieżki do uruchomionego pliku nie spakowanego udało mi się poprzez:

Code: Zaznacz cały

URL dirUrl = Formatka.class.getResource("./");
Jednak po spakowaniu do .jar nie działa mi to już (pewnie dlatego plik Formatka.class jest spakowany).

Re: ścieżka do pliku

Napisane: poniedziałek, 26 października 2009, 14:31
przez rhymie
Częściowo rozwiązałem problem:

Code: Zaznacz cały

Class c = test.class;
        URL classUrl = c.getResource(c.getSimpleName() + ".class");
        URL newUrl = new URL(classUrl, "../../");
        String path = newUrl.getPath().replaceAll("%20", " ");
po spakowaniu do .jar ładnie podaje ścieżkę, jednak jak dodam :

Code: Zaznacz cały

       File plik = new File("test.ini");
        if (!plik.exists())
        {
            plik.createNewFile();
        }
       System.out.println(plik.getAbsoluteFile());
to i tak zrobi plik w katalogu domyślnym.

Re: ścieżka do pliku

Napisane: poniedziałek, 26 października 2009, 21:07
przez Morfidon
new File("pliczek.jakiesrozszerzenie"); stworzy Ci plik w domyślnym katalogu, z którego został odpalony program, jeśli chcesz aby był gdzie indziej musisz podać jako argument dla konstruktora całą ścieżkę.

http://java.sun.com/j2se/1.3/docs/api/java/io/File.html

Re: ścieżka do pliku

Napisane: wtorek, 27 października 2009, 10:08
przez rhymie
fakt.

Zauważyłem jednak, że uruchomione programy z archiwum .jar mają tendencję
do wypisywania Stringa path w postaci:

Code: Zaznacz cały

System.out.println(path);
file:/C:/katalog
a nie spakowane wypisują poprawnie ścieżkę:

Code: Zaznacz cały

System.out.println(path);
/C:/katalog

Usuwając substringiem "file:" ze ścieżki w końcu działa jak należy, tyle że to nie wydaje mi się eleganckim rozwiązaniem.

Ostatecznie kod wyglądałby tak (może komuś się przyda)

Code: Zaznacz cały

       Class c = test.class;
        URL classUrl = c.getResource(c.getSimpleName() + ".class");
//        URL newUrl = new URL(classUrl, "../../");

        String path = classUrl.getPath().replaceAll("%20", " ");
        int tmp = path.indexOf("JA7");
        String path2 = path.substring(0, tmp);
        path2 += "test.ini";

        if (path2.substring(0, 5).equals("file:"))
            path2 = path2.substring(6, path2.length());

        System.out.println(path);
        System.out.println(path2);

       File plik = new File(path2);
        if (!plik.exists())
        {
            plik.createNewFile();
        }
       System.out.println(plik.getAbsoluteFile());
Jedno wyjaśnienie: 3 linijka została wykomentowana, gdyż nie wiem dlaczego tym sposobem nowy URL nie może nigdy wyjść wyżej niż nasz plik jar ( u mnie jest to plik: JA7.jar), dlatego później go wycinam.

Zdaje sobie sprawę, że jest to bardzo "nieeleganckie" rozwiązanie i dlatego w dalszym ciągu będę szukał innego.
Może ktoś już zna lepsze i bardziej "elastyczne" ?

pozdrawiam,
rhymie