# Wo speichert man am besten Daten? Appdata?



## Hasrunda (29. Mrz 2012)

Angenommen meine Java-Applikation muss irgendwelche Daten zum progress speichern (zB bei einem Spiel welche level man freigeschaltet hat).

Unter Windows speichern die meisten Programme sowas ja in "C:\Users\<User>\AppData\Roaming\"


Gibt es diesen Pfad in irgendeiner Java-Variable, damit das ganze in Linux etc. äquivalent funktioniert?


----------



## Gast2 (29. Mrz 2012)

Es gibt ne Property die 
	
	
	
	





```
user.home
```
 heißt. Unter Windows zeigt die auf 
	
	
	
	





```
C:/Users/username
```
, unter Linux auf 
	
	
	
	





```
/home/username
```
, unter Mac zeigt die sicherlich auch irgendwo hin 
Ich speichere Daten dann meist in:

```
System.getProperty("user.home") + ".meineApplikation/"
```


----------



## Guybrush Threepwood (29. Mrz 2012)

EikeB hat gesagt.:


> Es gibt ne Property die
> 
> 
> 
> ...



Unter Windows nimmt man üblicherweise das folgende, da user.home sehr hässlich die Eigenen Dateien vollstopft:

```
String USER_DIR = System.getenv("APPDATA") + File.separator
			+ "programmname";
```

Es gibt aber noch weitere potentielle Variablen, z. B. wenn man Adminrechte hat.

Unter Mac nimmt man wie Linux user.home. Am besten fragst Du das Betriebssystem ab und setzt den Pfad entsprechend (bei Windows APPDATA, ansonsten user.home).


----------



## Gast2 (29. Mrz 2012)

Guybrush Threepwood hat gesagt.:


> Unter Windows nimmt man üblicherweise das folgende, da user.home sehr hässlich die Eigenen Dateien vollstopft:
> 
> ```
> String USER_DIR = System.getenv("APPDATA") + File.separator
> ...



So stimmts ja mal nicht, denn user.home zeigt auf *Dokumente und Einstellunge\username*
Dadrin steckt zwar auch Eigene Dateien, jedoch liegt dann das .PROGRAMMNAME Verzeichnisparallel zum Eigene Dateien. APPDATA liegt im gleichen Verzeichnis. Ich sehe daher nicht wo der Vorteil sein soll. Man hat allerdings den Nachteil, dass man das System abfragen soll. 

[EDIT]OK liest sich vielleicht etwas schlecht: Zusammengefasst: *Appdata* liegt *im* user.home![/EDIT]

Wozu also? 

@TO Nimm einfach user.home. Das ist Standard und vollkommen in Ordnung. Funktioniert nebenbei auch auf allen Systemen


----------



## Guybrush Threepwood (29. Mrz 2012)

user.home schaut auf Windows ******* aus. Es ist völlig unüblich, dort direkt in einem Unterordner Programmdaten abzulegen. Man erkennt daran praktisch immer die Java-Programme, die sich nicht um Style-Guides kümmern. Ich habe dort neben den üblichen Einträgen 8 Ordner mit Programmdaten liegen - allesamt ausschließlich von Java-Programmen. Wenn Du schon Dein Programm speziell auf Windows ausrichtest, dann solltest Du so viel Konfiguration in Kauf nehmen.

Jedes Programm, das sich auf Windows halbwegs an die üblichen Vorgehensweise hält speichert unter APPDATA. Klar liegt das auch unter user.home, aber es ist normalerweise nicht für den Nutzer sichtbar.

Und hier bereits der fertige Code zur Abfrage:

```
public String getUserDir(String programmname) {
			String userdir = "";
			if (System.getProperty("os.name").toLowerCase().indexOf("win") > -1)
				userdir = System.getenv("APPDATA") + File.separator
						+ programmname;
else
userdir  = System.getProperty("user.home") + File.separator
					+ programmname;

		}
		return userdir;
	}
```


----------



## irgendjemand (29. Mrz 2012)

bleib mal ruhig brauner ...

das stimmt zwar so weit bis XP MCE ... aber seit vista wurde genau das geändert ...

unter XP war "C:\Dokumente und Einstellungen\<username>" noch der über-ordner von "Eigene Dateien"

seit Vista wurde da aber einiges dran geändert ...

1) es heißt grundsätzlich "C:\Users\<username>" ... das i18n was der explorer anzeigt ist irrelevant ... einfach mal CMD.exe verwenden ... die zeigt die "echten" pfad an
2) "C:\Users\<username>" IST jetzt "Eigene Dateien" ... es heißt nur nicht mehr so ... das was du bestimmt meinst wäre das äquivalent "Dokuemente" was sich dann unter "C:\Users\<username>\Documents" findet

@topic

persönlich würde ich auch unter windows "user.home/.programmname" verwenden ... weil man ansonsten nicht nur zwischen Win und Nicht-Win unterscheiden müsste sondern auch zwischen 9x , 2k , XP , Vista/7 ...


----------



## Guybrush Threepwood (29. Mrz 2012)

irgendjemand hat gesagt.:


> persönlich würde ich auch unter windows "user.home/.programmname" verwenden ... weil man ansonsten nicht nur zwischen Win und Nicht-Win unterscheiden müsste sondern auch zwischen 9x , 2k , XP , Vista/7 ...



Sorry, das ist nicht korrekt: APPDATA gibt auf Win seit 9x den jeweils spezifisch dafür vorgesehenen Ablageort für Programmdaten aus.


----------



## irgendjemand (29. Mrz 2012)

Guybrush Threepwood hat gesagt.:


> Sorry, das ist nicht korrekt: APPDATA gibt auf Win seit 9x den jeweils spezifisch dafür vorgesehenen Ablageort für Programmdaten aus.



hmm .. da hast du mich jetzt missverstanden ... denn ich habe mich nicht mal auf "appdata" bezogen ... da dies immer noch eine unterscheidung zwischen den OSs wäre ... welche man mit "user.home/.programmname" grundsätzlich vermeidet*


----------



## Crian (30. Mrz 2012)

```
user.home/.programmname
```
 nehme ich auch.


----------



## maki (30. Mrz 2012)

> user.home schaut auf Windows ******* aus. Es ist völlig unüblich, dort direkt in einem Unterordner Programmdaten abzulegen. Man erkennt daran praktisch immer die Java-Programme, die sich nicht um Style-Guides kümmern.


So unüblich ist das IMHO gar nicht.
Natürlich findet man da u.a. Java SW (Netbeans, Eclipse, Maven, Groovy), aber nicht nur (VirtualBox, etc. pp.), finde ich persönlich gar nicht schlimm.
IME macht das meistens nur "Windows Only" SW anders.


----------



## U2nt (30. Mrz 2012)

Also ich kann auch nur sagen das es mich auf Windows gewaltig nervt, wenn Programme ihre Daten in 
	
	
	
	





```
user.home\.programmname
```
 speichern.
Ich benutze viel lieber AppData.


----------



## Gast2 (2. Apr 2012)

U2nt hat gesagt.:


> Also ich kann auch nur sagen das es mich auf Windows gewaltig nervt, wenn Programme ihre Daten in
> 
> 
> 
> ...



Wenn deine Argumente nicht ziehen wird halt eben nochmal wiederholt, dass du es blöd findest...


----------



## irgendjemand (2. Apr 2012)

kann auch sein das ich einfach verwöhnt bin weil ich kilometer was an platten im rechner hab *4 platten > 4 laufwerke + 2 sticks > 2 laufwerke*

von daher ist es mir meist völlig egal was unter C: abgeht da da eh nur mein win drauf läuft *und so das eine oder andere programm was sich partu nicht auf n anderes laufwerk installieren lassen will*

desswegen ist es mir auch völlig egal was unter user.home abgeht ... da dort halt nichts liegt was mich irgendwie interessieren könnte ... meine files liegen auf anderen platten ... und weil user.home nun mal unter allen system halbwegs den gleichen pfad hat *unter win halt C:\Users\ und unter unix /home/* und man auch sicher sein kann das ein programm innerhalb dieses ordners und damit aller sub-ordner definitiv schreibrechte hat ... warum nicht dierekt nehmen ?

natürlich ist appdata nur ein sub-folder von user.home unter win ... aber falls man doch mal ran muss tun sich die meisten 0-8-15 user schon etwas schwer ...

und ob man nun den führenden punkt grundsätzlich verwendet *und damit unter unix einen "unsichbaren" ordner erzeugt und unter win es einfach nur merkwürdig aussieht* ... oder diesen weglässt ... liegt meiner ansicht nach an dem was man erreichen will ...

wenn man für den user unsichtbar und unveränderlich seine daten speichern will ... dann könnte man unter win gleich die registry nehmen ... davon haben nun noch weniger leute ahnung ...


ich denke über das thema kann man sich echt gegenseitig totschlagen ... weil es immer mehrere lager geben wird ... alleine schon die OS lager ... und dann innerhalb derer noch die verfechter bestimmter speicher-orte ...


----------



## Guybrush Threepwood (2. Apr 2012)

kappesf hat gesagt.:


> Wenn deine Argumente nicht ziehen wird halt eben nochmal wiederholt, dass du es blöd findest...



Der User U2nt hat in diesem Thread zum ersten Mal gepostet. Wieso greifst Du ihn an?


----------



## Gast2 (2. Apr 2012)

Guybrush Threepwood hat gesagt.:


> Der User U2nt hat in diesem Thread zum ersten Mal gepostet. Wieso greifst Du ihn an?



Hab mich verguckt sry. Dann nehm ich es mal komplett zurück. Mea Culpa.


----------

