Вы можете получить его, используя запрос в реестре, для этого не нужны JNA или права администратора.
Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell
Folders\" /v personal");
Очевидно, что это не сработает ни на чем, кроме Windows, и я не уверен, работает ли это для Windows XP.
EDIT:
Поместите это в рабочую последовательность кода:
String myDocuments = null;
try {
Process p = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal");
p.waitFor();
InputStream in = p.getInputStream();
byte[] b = new byte[in.available()];
in.read(b);
in.close();
myDocuments = new String(b);
myDocuments = myDocuments.split("\\s\\s+")[4];
} catch(Throwable t) {
t.printStackTrace();
}
System.out.println(myDocuments);
Обратите внимание, что это заблокирует процесс до тех пор, пока не будет выполнен запрос "reg", что может вызвать проблемы в зависимости от того, что вы делаете.