Мне нужно найти путь к документам с помощью Java. Следующий код не дает мне "точного" освобождения
System.getProperty("user.home");
Что должно быть наоборот?
P.S: Я не хочу использовать грязный трюк JFileChooser.
Мне нужно найти путь к документам с помощью Java. Следующий код не дает мне "точного" освобождения
System.getProperty("user.home");
Что должно быть наоборот?
P.S: Я не хочу использовать грязный трюк JFileChooser.
Вы можете получить его с помощью запроса реестра, не нужно для 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 query", который может вызвать проблемы, связанные с тем, что вы делаете.
Это легко, JFileChooser
находит это для вас
JFileChooser().getFileSystemView().getDefaultDirectory().toString();
Я надеюсь, что это поможет кому-то
Поскольку самый лучший ответ от @xchiltonx использует JFileChooser
, я хотел бы добавить, что в отношении производительности это быстрее, чем при использовании JFileChooser
:
FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
На моем ПК JFileChooser
aproach требуется 300 мс, а вызов FileSystemView
требуется непосредственно менее 100 мс.
Примечание: вопрос является возможным дубликатом Как найти папку "Мои документы" в Java
Используя JNA, вы сделаете следующее:
String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL);
JNA извлекает DLL на лету, а затем использует JNI с этой DLL для вызова Windows API. Тем не менее, он скрывает от вас все детали JNI. Использование JNA так же просто, как использование любой другой JAR-библиотеки JAR.
"user.home"
возвращает домашний каталог пользователя, а не папку "Мои документы".
В Windows это будет "C:\Users\Username" для Vista или 7 или "C:\Documents and Settings\Username" для XP
Что вы хотите:
System.out.println(System.getProperty("user.home") + File.separatorChar + "My Documents");
это то, что делает eclipse, чтобы получить папку пользовательского документа
System.getProperty("user.dir") //$NON-NLS-1$
+ File.separator + "workspace")
Надеюсь, что это поможет!
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user") + (File.separatorChar + "My Documents")));
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());