Avatar billede gladmhensk Nybegynder
06. juli 2004 - 13:23 Der er 22 kommentarer og
1 løsning

Path til main fil

Skal bruge en metode til at få stien(directory) på java filen.

Ligenu ser min main kode således ud (har kun skrevet i main):

    public static void main(String[] args) {
        File dir = new File("D:/Udvikling/Java");
    File[] fileReferences = dir.listFiles();
    for(int i = 0; i<fileReferences.length; i++){
        System.out.println("Root directory: "+ fileReferences[i]);
    }

File dir = new File("D:/Udvikling/Java"); <- Jeg vil gerne undgå at skulle skrive path manuelt i koden...Kan den ikke finde ud af det selv ? Skal lige siges, at den refererer til den mappe som java filen ligger i....
Avatar billede rbj_fp Nybegynder
06. juli 2004 - 13:28 #1
Hvis du bruger File dir = new File() burde du få en default sti
Avatar billede gladmhensk Nybegynder
06. juli 2004 - 13:34 #2
Virker ikke:

Test.java [7:1] cannot resolve symbol
symbol  : constructor File ()
location: class java.io.File
        File dir = new File();
                  ^
Avatar billede rbj_fp Nybegynder
06. juli 2004 - 13:42 #3
Prøv lige :
String mitDir = System.getProperty(user.dir);
File dir = new File(mitDir);
Avatar billede rbj_fp Nybegynder
06. juli 2004 - 13:42 #4
Jeg mente at File havde en default konstruktør.... :-)
Avatar billede europe Nybegynder
06. juli 2004 - 13:43 #5
File dir = new File(getClass().getResource("/").getPath());

Det burde også virke...
Avatar billede rbj_fp Nybegynder
06. juli 2004 - 13:43 #6
Sorry skulle være : String mitDir System.getProperTy("user.dir");
Avatar billede simonvalter Praktikant
06. juli 2004 - 13:48 #7
ingen af dem virker men europes er tæt på.
File dir = new File(getClass().getResource("").getPath());
Avatar billede europe Nybegynder
06. juli 2004 - 13:50 #8
Okay - ja det virkede så ikke her er noget...
import java.io.File;
import java.net.URL;
public class Class1
{
  public static void main(String[] arg)
  {
    Class1 test = new Class1();
    URL url = test.getClass().getResource("/");
    String location = new File(url.getPath()).getPath();
    System.out.println(location);
    File f = new File(location);
  }
}
Avatar billede simonvalter Praktikant
06. juli 2004 - 13:54 #9
europe virker heller ikke ;)
Avatar billede europe Nybegynder
06. juli 2004 - 13:55 #10
Hvad er der galt med den ? Det virker fint her....
Er det mig eller skulle han ikke have stien til java-filen - det skulle denne giver denne her da, ik ?
Avatar billede arne_v Ekspert
06. juli 2004 - 13:57 #11
Skal vi lige holde 3 ting adskilt:

1)  default directory
2)  directory med .java filen
3)  directory med .class/.jar filen

#1 er korrekt System.getProperty("user.dir")

#2 er umulig

#3 er mulig ved brug af classloader
Avatar billede simonvalter Praktikant
06. juli 2004 - 13:57 #12
nej du skal have stien relativt fra hvor du står, så dit første forsøg virkede næsten bortset fra at du skal fjerne "/" og bruge "" eller "." for at få stien fra hvor du loader filen.
og der er endnu et problem. for den bliver opfattet som en url så  mellemrum bliver udskiftet med  %20
Avatar billede arne_v Ekspert
06. juli 2004 - 14:00 #13
Til #3 lavede jeg engang følgende lille kode:

import java.util.*;

public class GetPath {
    private static String getPath() {
        String cn = GetPath.class.getName();
        StringTokenizer st = new StringTokenizer(cn,".");
        StringBuffer sb = new StringBuffer("");
        boolean first = true;
        while(st.hasMoreTokens()) {
            if(first) {
                first = false;
            } else {
                sb.append("/");
            }
            sb.append(st.nextToken());
        }
        sb.append(".class");
        String path = GetPath.class.getClass().getClassLoader().getSystemResource(sb.toString()).getPath();
        return path;
    }
    public static void main(String[] args) {
      System.out.println(getPath());
    }
}
Avatar billede europe Nybegynder
06. juli 2004 - 14:05 #14
Som jeg læse doc til getResource så converteres "." bare til "/" - eller er det helt forkert ?
Avatar billede simonvalter Praktikant
06. juli 2004 - 14:08 #15
det virker ihvertfald ikke sådan, svjv er / er toppen af din struktur
som root i linux og c:\ i windows
Avatar billede arne_v Ekspert
06. juli 2004 - 14:17 #16
Og hvis nogen vil vide hvorfor jeg gør det bå den besværlige måde, så prøv
og test programmet med:

java -classpath C:\;. DitProgram
Avatar billede europe Nybegynder
06. juli 2004 - 14:22 #17
Ja okay - det er nok smartere det du lave arne - der kan man se - man lærer noget hver dag...
Avatar billede gladmhensk Nybegynder
07. juli 2004 - 10:27 #18
Kan desværre ikke bruge nogen af tingene....skal jeg selv tage point så ?
Avatar billede arne_v Ekspert
07. juli 2004 - 10:42 #19
Eller så skal du nok forklare hvad det er du skal bruge og hvorfor alle de forskellige
forslag ikek duer.
Avatar billede gladmhensk Nybegynder
07. juli 2004 - 13:23 #20
Skulle bruge 2)  directory med .java filen
og det var åbenbart umuligt....så er der vel ikke mere at gøre....løser det på en anden måde...
Avatar billede rbj_fp Nybegynder
07. juli 2004 - 13:27 #21
Hvorfor har du behov for at vide hvor .java filen ligger? Det vil være naturligt at man skulle bruge kataloget hvor .class filen ligger
Avatar billede gladmhensk Nybegynder
07. juli 2004 - 13:39 #22
Lang forklaring....skal bruges i et andet sammenhæng....ville såmænd også finde ud af hvoen man gjorde hvis man kunne....men læg et svar arne. Har løst det på en helt anden måde...
Avatar billede arne_v Ekspert
07. juli 2004 - 13:53 #23
.class filen indeholder kun navnet på .java filen uden sti. Formentlig fordi
at det normalt ikke giver mening at gemme den information - der kan jo være
compilet på en anden maskine eller source kan være flyttet eller slettet
siden build. Det er f.eks. ret almindeligt at checke ud af source control
til et temporært directory, compile og så slette igen.

(og svar)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester