Как найти папку "Мои документы" в Java
Я хочу сохранить файл в папке "Мои документы".
Я попытался получить такое местоположение:
System.getenv("USERPROFILE") + "\\My Documents\\"
Тогда я понял, что это не сработает в системе, где язык установлен на другой язык, например французский.
Есть ли другой способ получить папку "Мои документы"?
Ответы
Ответ 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().
Ответ 4
Взгляните на http://technet.microsoft.com/en-us/library/cc749369(WS.10).aspx
Ответ 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
не уверен, какое место на самом деле, но это один из них.