Wie kann ich Windows -Dateinamen in Java nicht entfernen?
-
22-09-2019 - |
Frage
Aus Java extrahiere ich eine ausführbare Datei in einen von Datei.CreateTempile () angegebenen Speicherort. Wenn ich versuche, meine ausführbare Datei auszuführen, hängt mein Programm, wenn es versucht, die erste Ausgabezeile zu lesen.
Ich habe festgestellt, dass wenn ich versuche, die gleiche extrahierte ausführbare Datei aus einem anderen Programm auszuführen, es funktioniert, wenn ich das Verzeichnis als C: Dokumente und Einstellungen Benutzername Lokale Einstellungen temp prog.exe angeben. Aber wenn ich das Verzeichnis als c: docume ~ 1 usererna ~ 1 locals ~ 1 temp prog.exe angeben habe, bekomme ich den Hang.
Gibt es eine Möglichkeit, den Tilde -Dateinamen in meinem Programm zu entmischen, damit ich einen Verzeichnisnamen angeben kann, der funktioniert?
(Und da ich immer gerne die Sprach- und API -Designprobleme anspricht, gibt es einen Grund, warum Java -Datei.CreateTempile () und java.io.tmpdir zu verstümmelten Dateinamen bewerten müssen?)
Lösung
Sie können verwenden getCanonicalPath()
Um den erweiterten Weg zu bekommen. Z.B:
try
{
File file = File.createTempFile("abc", null);
System.out.println(file.getPath());
System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}
... produziert ...
C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp
Ich habe dies auf XP getestet, aber es würde ähnlich auf anderen Windows -Betriebssystemen funktionieren.
Siehe @Raviaws Antwort auf Ihre zweite Frage.
Andere Tipps
Wow, das habe ich nie gesehen. Tatsache ist, dass die Umgebungsvariable % temp % einen verstümmelten Namen zurückgibt (dies ist von meinem Computer):
TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
Unter der Annahme, dass ein neu erstellter Java VM die Umgebungsvariable verwendet, um den Standort temporärer Ordner zu erhalten, ist es nicht die Schuld von VM, dass die Verzeichnisse verstopfen.
Und selbst wenn Sie versuchen zu verwenden System.getenv () Um den temporären Ordner zu erhalten, haben Sie immer noch das gleiche Problem.
Ich würde das sicherstellen:
- Das Problem wird nicht durch die Tatsache verursacht, dass Sie ein Verzeichnis namens "Prog.exe" haben (basierend auf Ihrer Frage gehe ich davon aus);
- Wenn die Datei "prog.exe" ist, wenn sie von einem anderen Programm nicht verwendet wurde (vielleicht ein Antivirus);
- Überprüfen Sie, ob Ihr Computer gesund ist (dies wäre ein sehr kritischer Fehler für jede Anwendung, die keine Webanwendung ist und die temporäre Dateien benötigt).