2012-04-11 35 views
0

Ich schreibe eine Java-Anwendung, die eine Reihe von Dateien schreibt, und liest später die Dateien für ihre Werte. Ich verwende InstallShield, um die Anwendung unter C:\Program Files zu installieren, und hier werden normalerweise die temporären Dateien erstellt. Bei Verwendung von Windows 7 werden die Dateien jedoch unter dem temporären Ordner des Benutzers mit einem zufälligen Namen erstellt.Erstellen von Dateien für die spätere Verwendung in Java

Hier ist mein Code ...

File usersTemp = File.createTempFile("users", null,temp); 

Und das ist die Datei, die ...

C:\Users\TP\AppData\Local\Temp\users2343200092608531612.tmp 

Da die Datei mit einer Zufallszahl generiert wird erzeugt, es macht es schwer um die Datei zur Verarbeitung zurückzuholen. Gibt es einen besseren Weg, dies zu tun?

+0

Können Sie nicht den Dateinamen in einer Variablen setzen, indem Sie 'usersTemp.getAbsolutePath()' aufrufen und diese Zeichenfolge für später verwenden? –

+0

Ja, ich habe das versucht, aber wenn ich das Programm schließe und es erneut ausführe, habe ich die Variable nicht bereits, sie würde durch eine neue ersetzt werden. – sutoL

Antwort

2

Sofern Sie als Superuser laufen lassen (die Sie wahrscheinlich nicht sind), können Sie nur bearbeiten, Dateien im Home-Verzeichnis des Benutzers, die Sie mit dem user.homesystem property finden:

System.getProperty("user.home") 

So, wenn man will eine Datei in Ihrer Anwendung Anwendungsdaten-Ordner speichern:

File appDataFolder = new File(System.getProperty("user.home"), "Local Settings\\Application Data\\YourProgramName"); 

Dann Dinge unter diesem Ordner speichern und sie werden bleiben, um.

1

Gibt es einen Grund, warum Sie die Dateien nicht einfach normal speichern können (benennen Sie sie, was immer Sie wollen)? Ich habe viele Java-Programme für Windows 7 geschrieben und hatte keine Probleme beim Speichern von Dateien.

Verwenden Sie einfach einen FileOutputStream oder eine andere Methode zum Speichern von Dateien.

+0

das Problem ist mein Programm kann Dateien im Verzeichnis C: \ Programme nicht erstellen, und es ist wegen der administrativen Rechte, wenn ich nicht falsch bin – sutoL

1

Die Definition einer Temp-Datei ist, dass sie nur für eine kurze Zeit existieren sollte. Es scheint, als ob Sie eine Datei erstellen möchten, die für längere Zeit bestehen bleibt und möglicherweise zwischen den Läufen der Anwendung verbleibt? Wenn dies der Fall ist, sollten Sie eine Datei mit einem richtigen Namen sein ... und

new File("c:\filename.txt").createNewFile(); 

Auf diese Weise Sie in der Lage sind, ein Verzeichnis und einen Namen zu wählen, die geeignet wäre, egal welches Betriebssystem Sie führe die Anwendung aus.

+0

Hallo, das ist genau das, was ich denke, würde aber aufgrund von Windows Adminstrative Rechte funktionieren Ich bekomme eine java.io.IOException: Zugriff verweigert – sutoL

+0

Sie müssten ein Verzeichnis auswählen, zu dem der Benutzer Schreibrechte hat. Wahrscheinlich ist die einzige Möglichkeit, dies zu tun, das Home-Verzeichnis des Benutzers zu verwenden, wie es von @Brendan ... 'System.getProperty (" user.home ")' vorgeschlagen wird. Alle anderen Verzeichnisse verbieten möglicherweise Schreibzugriff. – wattostudios

Verwandte Themen