öffnen einer Datei mit relativer Pfadangabe

Status
Nicht offen für weitere Antworten.

till123

Bekanntes Mitglied
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.
 
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 .
 
"START", sehe ich als Befehl um eine Datei zuöffnen.

Wie z.B. "open" bei UNIX.


Hier noch mein aktueller Codeausschnitt:
Code:
	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;
	}
 
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?
 
Du kannst sowas hier machen:

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

Dann haste den kompletten Pfad und nicht nur den relativen.
Willste sowas?
 
@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
 
bei mir funktioniert jedenfalls
Code:
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
 
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):
Code:
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]
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben