Geeigneten Speicherort finden ?

dehlen

Bekanntes Mitglied
Hey habe eine kleine Frage zum Speichern von Files. In einer Anwendung von mir speichere ich Highscore und ein paar Einstellungen in zwei Textdateien. Diese werden beim Start der jar direkt im gleichen Verzeichnis wie die jar erstellt. Ich würde sie aber gerne wo anders erstellen.
Nun gibt es ja die Möglichkeit mit Properties das im Home Verzeichnis zu speichern, doch dort finde ich es Auch eher störend. Dann gibts noch die Möglichkeit einen eigenen Pfad anzugeben, aber dann ist es nicht mehr plattformunabhängig. Dann kann ich noch Abfragen auf welchem Os das Programm gestartet wurde und danach die Pfade wählen aber da ich es am liebsten in Windows im Programme Ordner hätte geht das auch nicht, da nicht jeder seine Programme auf C: hat. Ansonsten würde diese Methode für mich passen. Also gibts da noch irgendeine bessere Lösung oder muss ich dann damit leben das es dann z.B im Home Ordner verweilt ?

Gruß dehlen
 
ich würde mir einen versteckten ordner im home directory erstellen (z.b. ".deineApp"). In dem Ordner könntest du dann deine zwei files ablegen. Das ist dann auch Plattformunabhängig 🙂
 
Bester Speicherort für sowas ist imho das User Home Directory:
Code:
System.getProperty("user.home");

Das hat den Vorteil dass verschiedene User auf dem System spielen können und jeder wird seinen eigenen Speicherstand haben, ohne dass du im Programm ein User Management einführen musst.

edit: Note to self: Erst lesen, dann schreiben. 😳
 
Hi,

die Variante "home-Verzeichnis" hat doch den Nachteil, dass man einen Deinstaller braucht, um so ein java-Programm zu entfernen. Für meine Zwecke bleibe ich dabei, alle Dateien im jar-Ordner zu halten.
 
Stimmt schon, der User müsste die Überbleibsel aus dem Home Verzeichnis per Hand löschen. Das Problem bei deinem Ansatz ist allerdings (abgesehen davon dass User X eben Zugriff auf die Daten von User Y hätte), dass der User nicht einfach die JAR verschieben kann. Er müsste den ganzen Ordner nehmen. Und wenn er's nicht tut und das ein paar mal rumschiebt hast du am Ende trotzdem noch an diversen Stellen irgendwelche toten Files rumliegen.

Ich würde beim Home Verzeichnis bleiben und beim erstmaligen Programmstart einen Dialog anzeigen:
"Dieses Programm legt Dateien im Ordner xxx an. Sollten sie das Programm nicht mehr verwenden wollen, sollten Sie diese Dateien löschen".
 
Ok ich habe es nun so gemacht das ich den Ordner im HomeVerzeichnis ablege... er erstellt einen Order der so aussieht: .Name. Also mit dem Punkt davor, sodass er in Linux und Mac nicht zu sehen ist. Dann überprüfe ich den os.name. Wenn das mit Windows beginnt führe ich zusätzlich diese Methode aus:
Java:
public static void hideFileOrFolder(File file){ 

		try{ 
		Runtime.getRuntime().exec("attrib +a +s +h \""+file.getAbsolutePath().toString()+"\""); 
		}catch(Exception e){} 

		}

Wobei der übergebene File mein Ordner ist.
Sprich der Ordner ist auf allen Plattformen im Hom Verzeichnis aber versteckt. Dann gebe ich außerdem noch eine JOptionPane beim ersten Start aus, die dem User das sagt. Nun würde ich gerne noch ein Deinstallationsskript hinzufügen, nur für den Fall, dass der User "zu doof" ist die versteckte Datei zu löschen.

Also mache ich da für Windows einfach eine .bat und für Linux und Mac eine .sh ?
 
Hm, werden nicht auch in Windows standardmäßig alle Dateien oder Ordner die mit nem Punkt beginnen ausgeblendet? Ich glaube die Methode kannst du dir sparen 🙂

EDIT:
Habs hier auf der Arbeit mal getestet, die werden leider nicht versteckt 😉

Also mache ich da für Windows einfach eine .bat und für Linux und Mac eine .sh ?
Ja.
 
Ok für Linux und Mac habe ich nun folgendes:
Java:
echo JEscape wird gelöscht....
rm -R -f ~/.JEscape
find ${PWD} -name "JEscape.jar" -exec rm -R -f {} \;
echo Dateien wurden gelöscht.

Da die JEscape.jar ja überall liegen kann, suche ich nach dieser .jar und lösche sie dann. Das gleiche mache ich auch mit dem Ordner der die Einstellungsdateien birgt, nur zur Sicherheit.

Nun ja aber mit Batch habe ich so meine Probleme... 😉
Hab eigentlich noch nie mit Batch was gemacht... kann man das genauso nur für Batch realisieren ?
Danke!

EDIT: Gerade gemerkt das es nur auf Mac geht... ok dann brauche ich wohl noch eine Windows und eine Linux Lösung -.-

EDIT2: Habs für Linux nun hinbekommen :
Code:
find ${PWD} -name "JEscape.jar" -print0 | xargs -0 rm {} .....
Also ich hoffe es findet sich noch jemand mit guten Batch Kenntnissen ? Wäre toll 😉
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben