# Bezug auf relative Pfadangaben



## Wurzelseppi (18. Dezember 2006)

Hallo zusammen,

ich hoffe, daß meine Frage keine allzugroße "DAU" - Frage ist. Naja, entscheidet selbst 

Also, ich bin gerade dabei ein Eclipse PlugIn zu schreiben. Dabei habe ich einen neuen Menüpunkt per ObjectContribution an einen bestimmten FileTypen gehängt.

Über diesen Menüpunkt wird ein JAVA Code Generator (existiert bereits und ist für mich ne Blackbox) gestartet.
Dieser Codegenerator liest allerdings aus dem File, welches ich selektiert habe, und welches demzufolge auch Ziel meiner Contibution ist, einige Konfigurationen aus, und mitunder auch die Lokationen anderer Files, die der Generator benötigt.
Nun sind die Pfadangaben aber nicht alle absolut, sondern besziehen sich relativ auf das Project - Directory. 
Da das Java Program (mein PlugIn) aber nicht aus dem Projekt - Directory gestartet wird, bekomme ich folglich einen Haufen FileNotFound´s um die Ohren gehaun.

Kann ich den Source Pfad eines JavaPrograms ändern ?

Danke für Tipps und Tricks 

Gruß,

Wurzelseppi


----------



## Laocoon (18. Dezember 2006)

Hi,

bin grad an einem ähnlichem Problem zu gange. Wenn du dir sicher sein kannst, dass die Pfadangaben immer relativ sind, dann genügt 


```
File new File("C:/basisverzeichnis", "unterverzeichnis");
```

dann wird dein File Object relativ zu "C:/basisverzeichnis" angelegt.
Wenn deine Pfade allerdings auch absolut sein können, scheint das so leider nicht zu klappen.

Mein Lösungsansatz dazu ist derzeit:


```
public final static String PROP_USER_DIR = "user.dir";
//...
    private File getFileObject(String path, File curDir){
        String oldDir = System.getProperty(PROP_USER_DIR);
        //This ensures, that relative pathes are resolved correctly. The File(String, String) constructor did not work correctly.
//---So setzt man übrigens den "sourcepfad" @ wurzelseppi ;)
        System.setProperty(PROP_USER_DIR, curDir.getAbsolutePath());
        File file = null;
        try {
            file = new File(path);
            if(file.exists()){
                //"Fix" the path
                file = file.getAbsoluteFile();
            }
            else{
                file = null;
            }
        } finally {
            // Make sure, that the old directory is restored
            System.setProperty(PROP_USER_DIR, oldDir);
        }
        
        return file;
    }
```

Das funktioniert an sich. Allerdings wäre ich über eine "saubere" Methode glücklicher.

MfG
Daniel


----------



## Wurzelseppi (18. Dezember 2006)

Hi,


hmmmm....

das hatte ich schon versucht, aber ohne Erfolg.....muss ich jetzt nochmal checken, ob ich irgendwo einen Wurm drin habe...

Vielen Dank jedenfalls.....

Gruß,


Wurzelseppi


----------



## Wurzelseppi (18. Dezember 2006)

Hi nochmal,

habs mal so versucht.....

Hab ein File in mein Projekt gelegt, und dann deine Funktion so gestartet...


```
File myFile = getFileObject("myFile.txt", new File(System
				.getProperty("user.dir")
				+ this.selectedFile.getProject().getFullPath().toOSString()));
```

Der Pfad, den ich von


```
System.getProperty("user.dir")
				+ this.selectedFile.getProject().getFullPath().toOSString())
```

zurück bekomme, sieht ok aus....( D:\Development\eclipse-SDK-3.2.1-win32\MyTestProject )


----------



## Laocoon (18. Dezember 2006)

Oops, 

grad mal durchgetestet (hätte ich was früher machen sollen ) und festgestellt, dass er da in meiner if abfrage mist baut. So klappts bei mir:


```
public static File getFileObject(String path, File curDir){
        String oldDir = System.getProperty("user.dir");
        System.setProperty("user.dir", curDir.getAbsolutePath());
        File file = null;
        try {
            file = new File(path);
            file = file.getAbsoluteFile();
        } finally {
            System.setProperty("user.dir", oldDir);
        }
        
        return file;
    }
```


----------



## Agnus (4. Januar 2007)

wenn ich das richtig verstehe, dann hast du ein Projekt in deinem Eclipse, das eine Datei enthält, die du mit deinem Plugin bearbeiten willst. Der Code in deinem Plugin benötigt aber einen absoluten Pfad auf diese Datei.

Stimmt das so?

Gruß
Udo


----------



## Wurzelseppi (4. Januar 2007)

Hi,

nicht ganz. Der Code, welchen mein PlugIn aufruft, kann auch mit relativen Pfadangaben was anfangen. 
Allerdings nur, wenn das JAVA Programm den Projektpfad als root hat (Systemproperty "user.dir").
Da ein PlugIn aber immer das Eclipse-Programmverzeichnis als root hat, muss ich mit absoluten Pfadangaben arbeiten.


----------

