# Plattformunabhängig Ordner und Datei in Workspace anlegen



## Miriam84 (12. Okt 2009)

hallo,

wie ich möchte gern das in meinem workspace beim programmablauf bei auswahl einer bestimmten funktion ein Ordner und eine Datei angelegt wird. Allerdings soll beides nur einmal angelegt werden. 

Dazu hätte ich 2 Fragen.

1.wie komme ich an mein Workspacepfa.

2. wie kann ich dort einen Ordner und eine Datei anlegen. Dies soll aber Plattformunabhängig sein, also sowohl unter Unix als auch unter Windows funktionieren.


----------



## Gonzo17 (12. Okt 2009)

Miriam84 hat gesagt.:


> 1.wie komme ich an mein Workspacepfa.




```
ResourcesPlugin.getWorkspace().getRoot()
					.getLocation();
```

Damit sollte das klappen.




Miriam84 hat gesagt.:


> 2. wie kann ich dort einen Ordner und eine Datei anlegen. Dies soll aber Plattformunabhängig sein, also sowohl unter Unix als auch unter Windows funktionieren.



Hm, ich bin mir nicht sicher, aber theoretisch sollte das doch so klappen:


```
String workspacePath = ResourcesPlugin.getWorkspace().getRoot()
					.getLocation().toString();

			File tmpFile = new File(workspacePath
					+ "/test/test.file"); 
			
			if (!tmpFile.exists()){
				tmpFile.getParentFile().mkdirs();
				tmpFile.createNewFile();
			}
```


----------



## Miriam84 (12. Okt 2009)

Danke, genau das was ich gesucht habe.

ich muss sgen dass ist echt ein großartiges Forum hier. :toll:


----------



## Kelthas1222 (12. Okt 2009)

In Eclipse 3.5 sollte man wohl eher folgendes benutzen.
Desweiteren war der Vorschlag nicht plattformunabhängig, da Linux einen Slash, Windows aber einen Backslash benutzt (z.B.)


```
String workspacePath = Platform.getLocation().toOSString(); //Erzeugt den Pfad abhängig vom genutzten System
  String filePath = workspacePath + File.pathSeparator + "ordner" + File.pathSeparator + "file.name";
  //File.pathSeperator ist der Seperator, der für das genutzte System gilt.
  File file = new File(filePath);
  if (!file.exists()) {
	  file.getParentFile().mkdirs();
	  try { 
             //Try {..} catch {...} nötig bei createNewFile()
		file.createNewFile();
	  } catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	  }
  }
```


----------



## Gonzo17 (12. Okt 2009)

Ja, das stimmt, daran habe ich nicht gedacht. 

Kann man für den OS-spezifischen "Pfadtrenner" nicht auch folgende Zeile verwenden?


```
private static String SEPARATOR = System.getProperty("file.separator");
```

Den try-catch-Block hab ich im Übrigen weggelassen, weils mir sonst für das kleine Beispiel zu viel gewesen wäre. ^^ War etwas faul. Aber es stimmt natürlich, dass der da hin muss.


----------



## Wildcard (12. Okt 2009)

Kelthas1222 hat gesagt.:


> In Eclipse 3.5 sollte man wohl eher folgendes benutzen.
> Desweiteren war der Vorschlag nicht plattformunabhängig, da Linux einen Slash, Windows aber einen Backslash benutzt (z.B.)


Der Slash funktioniert auf allen Systemen plattformunabhängig, der backslash nicht.


----------



## Kelthas1222 (13. Okt 2009)

Wildcard hat gesagt.:


> Der Slash funktioniert auf allen Systemen plattformunabhängig, der backslash nicht.



Nicht ganz.
Soweit ich mich erinnere, hatten Dos-basierte Betriebssysteme ihre Probleme mit den Slash.
Kann mich da aber auch irren.

Wenn man ganz sicher sein möchte und es sauber machen will, sollte jedenfalls ein entsprechender Seperator verwendet werden.
Dazu kann man dann einen unserer Vorschläge nutzen.
Denn Gonzos Vorschlag geht natürlich auch


----------



## maki (13. Okt 2009)

> Soweit ich mich erinnere, hatten Dos-basierte Betriebssysteme ihre Probleme mit den Slash.
> Kann mich da aber auch irren.


Du meinst so wie DOS 3.3, Windows 95 und Windows ME? 
Seit Windows 2000 gibt es keine DOS basierten OS mehr.
Die irrst dich übrigens, Windows schluckt auch den "normalen" Slash.


----------



## Kelthas1222 (13. Okt 2009)

Ich weiß, das AKTUELLE Windows Versionen einen Slash interpretieren.
Aber:
1. Können das die alten (wie die von dir aufgeführten) Dos-basierten Betriebssysteme nicht
2. Selbst wenn es jedes Betriebssystem könnte, wäre der Slash eben nicht das offizielle Seperator Element.
3. Sollte man auch bei kleinen Projekten auf eine saubere Programmierung achten. Dazu gehört eben auch eine OS spezifische Pfadangabe, selbst wenn jedes OS auch ein Slash "schluckt"

Wer Plattformunabhängig sein will, sollte jedenfalls die von Java angebotenen Möglichkeiten verwenden und nicht darauf hoffen, dass es schon irgendwie überall klappt, weil Windows kanns ja


----------



## Kelthas1222 (13. Okt 2009)

Sry, für DP...

Ich habe übrigens nie gesagt, dass Windows das allgemein nicht könnte. 

Man merkt jedenfalls, dass man sich darüber anscheinend gut streiten kann ^.^


----------



## maki (13. Okt 2009)

Wieso streiten? 

Falls jemand wirklich ein 9+ Jahre altes OS einsetzt, wird der Slash nicht sein einziges bzw. größtes Problem sein 

Jedenfalls kann man seit Jahren mit dem Slash arbeiten, ohne Probleme, sogar unter Windows.


----------



## Kelthas1222 (13. Okt 2009)

Gepflegte Diskussionen sind immer gut und bringen Leben ins Geschäft ^.^



> Falls jemand wirklich ein 9+ Jahre altes OS einsetzt, wird der Slash nicht sein einziges bzw. größtes Problem sein


Wobei ich dir recht gebe, aber plattformunabhängig schließt das in meinen Augen ein *nick*



> Jedenfalls kann man seit Jahren mit dem Slash arbeiten, ohne Probleme, sogar unter Windows.


Wo ich dir wieder recht gebe, aber ein anderes Beispiel.
Welchen Seperator benutzt Mac denn?
Soweit ich weiß, war das bis vor kurzem noch ein Doppelpunkt... Hab aber nie ein Apple System genutzt (außer auf meinem iphone...), daher kann ich das nicht mit sicherheit sagen...


----------



## Wildcard (13. Okt 2009)

Mac benutzt / und das Betriebssystem wird von einem / sowieso nichts mitbekommen, weil in die VM im Windows Fall als \ interpretiert. Unsauber ist das nicht.
Den OS spezifischen Separator brauchst du erst dann, wenn du dem User Pfade textuell darstellen willst.


----------

