Bezug auf relative Pfadangaben

Wurzelseppi

Mitglied
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
 
Hi,

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

Java:
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:

Java:
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
 
Zuletzt bearbeitet von einem Moderator:
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
 
Hi nochmal,

habs mal so versucht.....

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

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

Der Pfad, den ich von

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

zurück bekomme, sieht ok aus....( D:\Development\eclipse-SDK-3.2.1-win32\MyTestProject )
 
Zuletzt bearbeitet:
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:

Java:
    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;
    }
 
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
 
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.
 
Zurück