Portál AbcLinuxu, 13. května 2025 22:41

Dotaz: Netbeans projekt a relativni cesta k souboru

23.7.2009 11:07 FITak
Netbeans projekt a relativni cesta k souboru
Přečteno: 1056×
Odpovědět | Admin

Dobry den, programuji projekt v Netbeans a zasekl jsem se na zdanlive malickosti. V programu pracuji s XML soubory a mam tedy tridu pro jejich nacitani a pro jejich dalsi zpracovani.

Jeste pred vysvetlenim problemu sem hodim strom projektu:

$ tree -d
.
|-- build
|   |-- classes
|   |   `-- program
|   |       |-- data
|   |       |-- images
|   |       `-- xml
|   `-- empty
|-- nbproject
|   `-- private
|-- src
|   `-- program
|       |-- data
|       |-- images
|       `-- xml
`-- test

Co jsem se dival do automaticky generovaneho kodu obrazky ze slozky images se nacitaji takto:

jLabelSTARTER.setIcon(new javax.swing.ImageIcon(getClass().getResource("/program/images/start.PNG")));

Z toho jsem logicky usoudil, ze kontruktor me tridy pro praci s XML budu volat takto:

XMLworker xmlDoc = new XMLworker("/program/data/score.xml", "scoreboard");

Soubor score.xml ve slozce data SKUTECNE existuje, presvedcoval jsem se o tom snad 100x.

Vzdy vsak dostanu chybu

program.xml.XMLworkerException: Cannot load document: java.io.FileNotFoundException: /program/data/score.xml (No such file or directory)
...

Zkousel jsem tu cestu k souboru ruzne upravoval, ale bezvysledne

Pkud by vas nahodou zajimal i ten vlastni konstruktor:

public XMLworker(String uri, String topElement) throws XMLworkerException
    {
        try
        {
            DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
            doc = builder.parse(uri);
        }
        catch (java.lang.Exception e)
        {
            throw new XMLworkerException("Cannot load document: "+e.toString());
        }
        checkDocumentStructure();
        test();
    }
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

msk avatar 23.7.2009 11:29 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tiez som s tym bojoval a dopracoval som sa len nejakeho medzivysledku a dalej som to neskumal. Vysledok je ten, ze pokial mam package "foo.faa" a v nom class-u "Foo" a nejaky subor, dajme tomu "data.txt", tak ho ziskam pomocu:

Foo().class.getResourceAsStream("data.txt");

Podmienkou je, aby data.txt a Foo.java boli v jednej package.

Tym nechcem tvrdit, ze to inak nejde, ale mne to takto staci a dalej to neriesim.
23.7.2009 11:45 FITak
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru

To reseni mi prijde trochu "pres ruku", ale budiz, s tim bych se smiril. Problem vsak je, ze v adresari data, kde je umisten soubor score.xml neni zadna trida...

23.7.2009 13:18 FITak
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nevi prosim nekdo? Opravdu nutne bych to potreboval vyresit. Myslim, ze NetBeans je natolik rozsirene IDE, ze hodne lidi s necim podobnym muselo setkat...

23.7.2009 13:39 jirka
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
vsimnul jste si rozdilu ve volani funkce getClass().getResource(string)? Parametrem teto funkce je cesta ktera se hleda v CLASSPATH, zatimco kdyz zavolate 
builder.parse(string) - tak se string povazuje za URI!! /nekde/neco je u me klasicka cesta v rootu.
spravne by melo byt neco jako:
jar:file:/.../foo.jar!/program/data/score.xml
tedy to co dostanete kdyz zavolate
getClass().getResource("/program/data/score.xml").toURI a to predate jako parametr, 
a nebo:
misto 
doc = builder.parse(uri);
volat
doc = builder.parse(getClass().getResourceAsStream(uri));


snad jsem se vyjadril dost jasne :)

23.7.2009 13:58 FITak
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru

Aha, dekuji, tuhle cast kodu jsem zkopiroval odsud (serial o XML na linuxsoft):

http://www.linuxsoft.cz/img/xml03/src/PhoneBookTableModel.java.html

tak jsem tomu veril...

23.7.2009 15:21 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Netbeans projekt a relativni cesta k souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
S NetBeans to nemá nic společného, je to čistě Java. První případ (načítání ikony) načítá soubor z resources, tedy spolu se zkompilovanými třídami Javy (v souboru JAR, pokud vytvoříte z aplikace balíček). Jak to funguje se dočtete v dokumentaci u metody java.lang.Class.getResource(), případně obdobná metoda u třídy ClassLoader.

V druhém případě se předává cesta k souboru na disku, dokumentaci hledejte u java.io.File.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.