2009-06-09 5 views
2

In unserer Anwendung erlauben wir Benutzern, Dateien und Verzeichnisse zu öffnen.Gibt es eine Möglichkeit, die 8.3 oder "kurze" (Windows) Version eines Dateinamens in Java zu generieren?

Java 6 bietet uns ...

java.awt.Desktop.getDesktop().open(file); 

die großen Werke. Da wir jedoch brauchen Java 5 Kompatibilität zu gewährleisten, setzen wir auch ein Verfahren zum Öffnen von Dateien, indem Sie den Befehl start in cmd.exe Aufruf ...

String command = "cmd.exe start ..."; 
Runtime.getRuntime().exec(command); 

Dies ist, wo das Problem auftaucht. Es scheint, dass der Befehl start nur 8.3 Dateinamen verarbeiten kann, was bedeutet, dass nicht-kurze (8.3) Datei-/Verzeichnisnamen dazu führen, dass der Befehl start fehlschlägt.

Gibt es eine einfache Möglichkeit, diese kurzen Namen zu generieren? Oder andere Problemumgehungen?

Antwort

6

Versuchen Sie so etwas wie dieses

import java.io.IOException; 

class StartExcel { 
    public static void main(String args[]) 
     throws IOException 
    { 
     String fileName = "c:\\temp\\xls\\test2.xls"; 
     String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",fileName}; 
     Runtime.getRuntime().exec(commands); 
    } 
} 

Es ist wichtig, einen Dummy-Titel in den Windows-Startbefehl zu übergeben, wo die Möglichkeit besteht, dass der Dateiname ein Leerzeichen enthält. Es ist eine Funktion.

+0

Dies hat den Trick. Vielen Dank! – thedude19

+1

es ist eine Funktion ... lol –

0

Oder Sie könnten versuchen:

Runtime.getRuntime().exec(
    new String[] { System.getenv("windir") + "\\system32\\rundll32.exe", 
    "shell32.dll,ShellExec_RunDLL", "http://www.stackoverflow.com" }); 

Quelle: http://www.rgagnon.com/javadetails/java-0014.html