# öffnen einer Datei mit relativer Pfadangabe



## till123 (19. Jun 2008)

Hallo,

ich habe folgendes Problem, und hoffe ihr könnt mir da helfen:

Wie kann ich z.B. folgende Datei (unter Windows) mit Java öffnen:
Vollständiger Pfad: C:/project/pro/doc/abc.pdf

Nun möchte ich aber nicht den ganzen Pfad im Quelltext angeben, da die Datei abc.pdf nicht auf jedem Rechner im gleichen Pfad liegen wird (kommt drauf an, wo man später das project speichert).

Was ich möchte:
z.B.:  START ../pro/doc/abc.pdf

Wie mache ich das genau unter Windows?
(Unter UNIX/MAC ist das alles kein Problem)


Oder gibt es noch eine andere bessere Alternative?
Das Hauptprogramm liegt im Ordner:
C:/project/pro/src/start.java



Danke.


----------



## SlaterB (19. Jun 2008)

was verstehst du denn unter START?

sowas hier?
 System.out.println(System.getProperty("user.home"));


relativ zum Ort der Programmausführung muss du gar nix angeben oder .


----------



## till123 (19. Jun 2008)

"START", sehe ich als Befehl um eine Datei zuöffnen.

Wie z.B. "open" bei UNIX.


Hier noch mein aktueller Codeausschnitt:

```
private AbstractAction getSpecification() {
		if(Specification == null)
		{
			Specification= new AbstractAction("Lastenheft", null) {
				public void actionPerformed(ActionEvent evt){
					try
					{
						String cmd;
				        if (ManagementFactory.getOperatingSystemMXBean().getName().equals("Mac OS X")) {
				        	cmd = "open";
				        }
				        else if (ManagementFactory.getOperatingSystemMXBean().getName().equals("Windows XP")) {
				            cmd = "START";
				        }
				        else {
				        	System.out.print(ManagementFactory.getOperatingSystemMXBean().getName()); 
				        	cmd="n";
				        	System.out.print("Unknown operating-system!"); 
				        } 
				        Process proc = Runtime.getRuntime().exec(new String[]{cmd, "../FuzzyDBMS/doc/Lastenheft.pdf"});
						proc.wait();
					}
					catch(Exception e){}

				}
			};
		}
		return Specification;
	}
```


----------



## SlaterB (19. Jun 2008)

und unter Windows funktioniert es nicht?
abgesehen davon dass der Befehl dann wohl nicht START heißt (edit: oder gerade START unter Windows?  ),
gibts ein kontretes Problem mit dem relativen Pfad oder fragst du im Voraus nach?


----------



## till123 (19. Jun 2008)

START unter Windows funktioniert. Wurde schon getestet (wenn du im richtigen Pfad bist)!


----------



## Krondor (19. Jun 2008)

Du kannst sowas hier machen:


```
File f = new File("deinRelativerPfad");
String absoluterPfad = f.getAbsolutePath();
```

Dann haste den kompletten Pfad und nicht nur den relativen.
Willste sowas?


----------



## till123 (19. Jun 2008)

@Krondor:

Das hört sich schon mal nicht schlecht an 
Werde den Quelltext mal ändern und testen.

Melde mich dann nachher wieder und teile euch mit, ob es funktioniert hat.

Danke


----------



## SlaterB (19. Jun 2008)

bei mir funktioniert jedenfalls

```
package test;



public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        Runtime.getRuntime().exec("cmd /c START ../Test2/src/test/Test.java");
    }
}
```
in einem Eclipse-Projekt Test2 mit Source-Dateien in einem Ordner src


----------



## till123 (19. Jun 2008)

So da bin ich wieder, musste mir gerade noch einen Windowsrechner besorgen...

@SlaterB:
Deine Code funktioniert und ist sogar noch "einfacher" als der zweite Lösungsweg.

@Krondor:
Dieser Weg funktioniert auch, jedoch war dem absoluten Pfad immer noch der relative pfad angehängt. Dieser String müsste also vorher noch kurz bearbeitet werden (ist aber auch nicht wirklich ein Aufwand).


Ich bedanke mich für euere Hilfe!!


Danke!!!!

Hier noch meine übernommene Lsg. (wird jetzt gleich noch für Linux-Systeme erweitert):

```
private AbstractAction getSpecification() {
		if(Specification == null)
		{
			Specification= new AbstractAction("Lastenheft", null) {
				public void actionPerformed(ActionEvent evt){
					try
					{
				        if (ManagementFactory.getOperatingSystemMXBean().getName().equals("Mac OS X"))
				        {
				        	Runtime.getRuntime().exec(new String[]{"open", "../FuzzyDBMS/doc/Lastenheft.pdf"});
				        }
				        else if (ManagementFactory.getOperatingSystemMXBean().getName().contains("Windows")) {
				            
				            Runtime.getRuntime().exec("cmd /c START ../FuzzyDBMS/doc/Lastenheft.pdf");
				        }
				        else {
				        	System.out.print(ManagementFactory.getOperatingSystemMXBean().getName()); 
				        	System.out.print("Unknown operating-system!"); 
				        } 
					}
					catch(Exception e){}

				}
			};
		}
		return Specification;
	}
```
[/code]


----------

