[JAVA] XML file niet te vinden bij starten via JAR

Pagina: 1
Acties:

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 14-11 12:44

Griffin

Is mythical

Topicstarter
Ik hoop dat de titel duidelijk is, maar sowieso even wat extra info hier.

Ik heb een applicatie die via netbeans perfect draaid en alles werkt, echter als ik de JAR file open dan werkt deze niet. Na zoeken en debuggen ben ik erachter gekomen dat het bestand/het path 'StartUp.start' (wat gewoon een XML file is) niet te vinden is.
Het is zo dat StartUp.start 1 van de vele xml bestanden is die ingelezen moeten worden.

Hoe heb ik het momenteel:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
private File generateFileFromPath(String path) {
        URL url = Main.class.getResource(path);
        File file = null;

        if (url != null) {
            try {
                file = new File(url.toURI());
            } catch (URISyntaxException e) {
                file = new File(url.getPath());
            }
        }
        return file;
    }


Als parameter geef ik "../dataFiles/StartUp.start" mee.

De mappen structuur is als volgt in de jar:
code:
1
2
3
4
5
6
JAR FILE:

-main
   * main.java
-dataFiles
   * StartUp.start


Dus als ik het goed heb is het met deze parameter "../dataFiles/StartUp.start" goed en gaat deze gezien van af de Main klasse 1 map terug en dan naar de map DataFiles en dan naar de file StartUp.start .
Echter de foutmelding die ik krijg als ik via Commando de jar file start is:
" Couldn't find the given path '../dataFiles/StartUp.start' "

Dus mijn volgende idee was om ipv "../dataFiles/StartUp.start" als parameter te sturen het volgende te sturen "/dataFiles/StartUp.start". Want volgens mij wordt er dan vanaf de Jar root gekeken, echter dit mag niet baten.

Ik heb me al sufgezocht op GoT, Google en noem maar op maar helaas niets kunnen vinden waar ik wat aan heb, dus daarom even hier een draadje.


Mocht ik niet duidelijk zijn geweest hoor ik dit graag want dan post ik nog wat bij :P

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Wat is je working directory als je de jar start? Als die namelijk anders is dan de locatie van je jar kan je natuurlijk geen relatieve paden gebruiken. :)
Oh wacht, je probeert een file uit die jar te openen. Dan heb ik geen flauw idee. :X

[ Voor 23% gewijzigd door AtleX op 12-06-2008 13:06 ]

Sole survivor of the Chicxulub asteroid impact.


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Probeer eens met ./ in plaats van /

En heb je al eens je variabelen gesysout? Gewoon om ff te kijken wat de inhoud van url en path is?

Fat Pizza's pizza, they are big and they are cheezy


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 14-11 12:44

Griffin

Is mythical

Topicstarter
Ik heb ./ gebruikt ipv / echter dit werkt niet bij het runnen vanuit JAR maar ook niet in Netbeans dus ipv beter te worden wordt het slechter.

Ja, als ik de URL uitprint dan komt er het hele path vanaf mijn D: schijf, want dat is logisch want ik vraag ook om een relatief path. (met getResource()). echter ik wil niet vanaf mijn D: schijf kijken maar vanaf de jar file.

  • redfox314
  • Registratie: December 2004
  • Laatst online: 07-11 14:35
op google gaf de query get resource from jar.

http://forum.java.sun.com/thread.jspa?threadID=278932
dit als eerste hit. Lijkt mij nuttig om iets gelijkaardigs eens te proberen.

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
Ik had iets gelijkaardig voor met een tekst file. Het is best wel mogelijk zolang je geen bestanden wil wijzigen, want dat kan niet in een jar.

code:
1
BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("setup.ini")));


setup.ini staat in dezelfde map als de klasse die em uitleest.

  • LAN
  • Registratie: Oktober 2000
  • Niet online

LAN

Inderdaad, getResourceAsStream is the way to go.

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
getResourceAsStream is inderdaad de te gebruiken manier. De reden: je maakt nu een File object en voor zover ik weet kan je met een File-object niet verwijzen naar een bestand in een JAR (daarvoor heb je juist die URL).
De getResourceAsStream is het makkelijkste, maar je kan het jezelf zo moeilijk maken als je wilt met bijvoorbeeld de URL te houden en daarop of openStream() of openConnection() etcetc te doen.

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 14-11 12:44

Griffin

Is mythical

Topicstarter
Wat blijkt de saxparser heeft niet persee een File te hebben, een volledig pad is genoeg.

dus wat we nu doen is van de URL de string op te roepen, dan gaat het wel goed. Het ging dus kapot op het FILE gedeelte.
Een deel is momenteel gefixt, echter hier en daar in de code gebruiken we nog File bestanden, dus daar blijft het kapot gaan. de volgende stap is het vervangen van die File's voor ander type, maarja dat moet ik even overleggen met de andere.
Pagina: 1