Подтвердить что ты не робот

Путь к My Documents в Java

Мне нужно найти путь к документам с помощью Java. Следующий код не дает мне "точного" освобождения

System.getProperty("user.home");

Что должно быть наоборот?

P.S: Я не хочу использовать грязный трюк JFileChooser.

4b9b3361

Ответ 1

Вы можете получить его с помощью запроса реестра, не нужно для 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", который может вызвать проблемы, связанные с тем, что вы делаете.

Ответ 2

Это легко, JFileChooser находит это для вас

JFileChooser().getFileSystemView().getDefaultDirectory().toString();

Я надеюсь, что это поможет кому-то

Ответ 3

Поскольку самый лучший ответ от @xchiltonx использует JFileChooser, я хотел бы добавить, что в отношении производительности это быстрее, чем при использовании JFileChooser:

FileSystemView.getFileSystemView().getDefaultDirectory().getPath()

На моем ПК JFileChooser aproach требуется 300 мс, а вызов FileSystemView требуется непосредственно менее 100 мс.

Примечание: вопрос является возможным дубликатом Как найти папку "Мои документы" в Java

Ответ 4

Используя JNA, вы сделаете следующее:

String myDocsPath = Shell32Util.getFolderPath(ShlObj.CSIDL_PERSONAL);

JNA извлекает DLL на лету, а затем использует JNI с этой DLL для вызова Windows API. Тем не менее, он скрывает от вас все детали JNI. Использование JNA так же просто, как использование любой другой JAR-библиотеки JAR.

Ответ 5

"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");

Ответ 6

это то, что делает eclipse, чтобы получить папку пользовательского документа

System.getProperty("user.dir") //$NON-NLS-1$
                    + File.separator + "workspace")

Надеюсь, что это поможет!

Ответ 7

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());