11. november 2009 - 12:29Der er
10 kommentarer og 1 løsning
Sti til fil på Windows og på Mac (og andet)
Hej Eksperter,
jeg er ved at lægge sidste hånd på hoveddelen af et projekt jeg laver med en. Vi sad hele natten i går og kæmpede med et problem, der nok synes banalt.
I vores Java program skal vi indlæse en *.txt fil med en masse info, de bliver læst ind i et hashmap og koden virker helt fint i vores Eclipse miljø. Vores problem opstod da vi skulle pakke det hele til en jar fil (vi bruger Ant, men tror nu ikke det har noget at sige).
Vores problem opstår i forskelle på hvordan ét styresystem refererer til en fil og et andet styresystem gør det på en anden måde.
Kort og godt ser vores mappe struktur således ud:
* Projektmappe (indeholder Eclipse .project fil og andet små) ** src (vores sourcemappe som indeholder alle vores *.java filer) ** data (den mappe der indeholder alle de *.txt filer vi skal have indlæst) ** bin (den mappe hvori vi vores kompilerede *.class filer ligger i og som er dem der skal laves til jar.
#|Projektmappe #| #|--src #|--data #|--bin
Her er mit spørgsmål så. I vores java projekt har vi stien således:
String dir = ""; dir = "./Data/";
Så vidt jeg har forstået gør "." (punktumet) at den står i roden af projektet (altså "projektmappe") og går så ind i mappen "/Data/" hvor den så finder den fil specificeret.
Dette virker som sagt fint når vi kører det igennem Eclipse. Når vi prøver at lave en jar og sikre os, at det hele ligger korrekt i mappestruktur, så har min makkers Mac intet problem med at køre "./Data/" stien, hvorom min PC m/ Windows ikke kan; dog har jeg en klar fornemmelse om, at den vil kunne uden "." (punktumet).
Det mærkelige er så, at vi prøvede at køre JAR filen på min makkers anden mac, men der havde den også problemer med at læse stien.
Jeg nægter at tro at jeg er den første med sådan et problem og der må være en slags universel løsning på problemet, for det kan da ikke være rigtigt at vi skal lade koden tjekke 5-6 steder for en fil, bare for at sikre os ethvert styre- og filsystem?
Hvis jeg ikke har forklaret mig ordentlig eller I har brug for mere information, så tøv endelig ikke med at skrive.
Grunden til at jeg er lidt mystificeret over problemet er nemlig, at jeg ved at punktum betyder den nuværende sti, men af en eller anden grund så kan vi ikke få det til at virke når vi laver JAR file. Det virker jo dog når vi begge kører programmet i Eclipse.
Vi lægger også tekst filerne ind i JAR'en, i samme mappestruktur som overstående, altså at den står i roden og peger ind i mappen "Data".
Vi har overvejet om det kan have noget at gøre med at vi bruger et stort D i mappenavnet "Data", men så alligevel, det burde den vel håndtere?
Men måske din løsning med at få koden til selv at finde stien til jar filen og operere relativt i forhold til den vil være en god løsning. Hvordan kan man det?
Vores fokus i projektet blev lidt afsporet af stien, men vi er inde i den sidste fase hvor JAR filen skal laves og så skal vi nok bruge dit gode råd, så skal nok vende tilbage inden alt for lang tid.
Vi skal egentlig blot lave det til en Windows maskine, men den professionelle stolthed gør, at da gerne vil lave det så programmet virker på alle systemer.
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.