En Java en Windows, ¿cómo puedo encontrar una carpeta de Escritorio redirigida?

Sé que al usar lenguajes .NET como C #, uno puede hacer algo como

Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 

para encontrar la ubicación redirigida del Escritorio. Sin embargo, en Java, no puedo pensar en una buena manera de hacer esto. ¿Cuál es la forma más adecuada de encontrar un directorio de escritorio de usuario redirigido desde Java, sin usar JNI? El propósito específico aquí es con el objective de administrar un atajo de escritorio, si el usuario lo desea, para una aplicación Java Web Start.

Esta aplicación necesita escribir en el árbol de “Datos de la aplicación” y opcionalmente en el escritorio. Estoy asumiendo que %APPDATA% siempre se llena correctamente, incluso cuando se redirigen las carpetas, para encontrar el árbol “Datos de la aplicación”. Entonces mi pregunta abierta es cómo encontrar de manera confiable la carpeta del Escritorio.

NOTA: Creo que la propiedad del sistema Java ${user.home} realidad ( y erróneamente ) localiza el directorio de escritorio del usuario a través de claves de registro y luego intenta navegar un directorio para encontrar el directorio “de inicio”. Esto funciona bien cuando no se redirigen directorios, y de lo contrario puede devolver algo útil.

 FileSystemView filesys = FileSystemView.getFileSystemView(); File[] roots = filesys.getRoots(); filesys.getHomeDirectory() 
 public class Sample { public static void main(String[] args) { String desktopPath =System.getProperty("user.home") + "\\"+"Desktop"; String s = "\"" + desktopPath.replace("\\","\\\\") + "\\\\" +"satis" + "\""; System.out.print(s); File f = new File(s); boolean mkdir = f.mkdir(); System.out.println(mkdir); } }