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

Как найти папку "Мои документы" в Java

Я хочу сохранить файл в папке "Мои документы".

Я попытался получить такое местоположение:

System.getenv("USERPROFILE") + "\\My Documents\\"

Тогда я понял, что это не сработает в системе, где язык установлен на другой язык, например французский.

Есть ли другой способ получить папку "Мои документы"?

4b9b3361

Ответ 1

Если вы не возражаете в зависимости от Swing, вы можете использовать этот трюк:

import javax.swing.JFileChooser;
javax.swing.filechooser.FileSystemView;

public class GetMyDocuments {
  public static void main(String args[]) {
     JFileChooser fr = new JFileChooser();
     FileSystemView fw = fr.getFileSystemView();
     System.out.println(fw.getDefaultDirectory());
  }
}

(источник: http://www.rgagnon.com/javadetails/java-0572.html)

Ответ 2

Что касается производительности, это быстрее, чем при использовании JFileChooser:

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

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

Ответ 3

Там расширение winfoldersjava JNI для доступа к специальным именам папок в Java.

Страница winfoldersjava также описывает другой метод с использованием Swing:

Кроме того, если вам нужен только путь "Мои документы" и не против касаться Swing, вам может не понадобиться WinFoldersJava. Вместо этого вы можете использовать javax.swing.filechooser.FileSystemView.getFileSystemView(). GetDefaultDirectory().

Ответ 5

Местоположение для этого каталога может быть изменено каждым пользователем, поэтому оно не зависит только от локали.
Чтобы найти, где находится эта папка, вы должны заглянуть в реестр. Команда Windows для этого:

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User
Shell Folders" /v personal

или

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 
Folders" /v personal

не уверен, какое место на самом деле, но это один из них.