Правильный метод поиска папки Мои документы пользователя в Windows с помощью Java?

По какой-то причине мне иногда нужно найти папку Мои документы текущего пользователя в Windows в программе Java, чтобы прочитать некоторые файлы. Но, насколько я могу судить, нет способа сделать это без серьезных недостатков.

Первый неправильный способ: System.getProperty ("user.home");
Почему не работает:

  • Возвращает только папку \ username \; Мне нужно добавить "\ Documents \" в конец, чтобы получить папку Documents ... и это работает только на английском языке.
  • Sun ошибки 6519127 и 4787931. Java находит домашнюю папку пользователя в Windows прочитав устаревший раздел реестра *, чтобы найти рабочий стол, затем взяв родительский; у этого метода есть несколько известных проблем, которые легко могут привести к возврату совершенно неправильной папки. Ошибкам 3,75 года и 8 лет без исправлений.

Второй неверный способ: использование программы чтения реестра для получения личной папки пользователя, которой являются Мои документы (но i18n'd).
Почему не работает:
Хотя он решает проблему только на английском языке, он по-прежнему использует ту же устаревшую область реестра, поэтому ошибки по-прежнему относятся к нему.

В устаревшем разделе реестра говорится, что нужно использовать собственный вызов (SHGetKnownFolderPath), что я, очевидно, не могу сделать из Java.

Третий неверный способ:

JFileChooser fr = new JFileChooser();  
FileSystemView fw = fr.getFileSystemView();  
File documents = fw.getDefaultDirectory();

Почему не работает: отлично работает!
За исключением тех случаев, когда это не так. Хотя у меня была программа, которая использовала это открытие и работала в фоновом режиме, я открыл игру DirectX (Fallout: New Vegas). Программа Java немедленно завершилась без трассировки стека. Всегда воспроизводимый (для меня в этой игре, и неизвестно в чем еще). Не удалось найти ошибку Sun №.

Так есть ли какой-нибудь способ найти папку «Документы» пользователя в Windows с помощью Java, у которого нет известных проблем?

(Это хороший большой вопрос.)

* (Ключ: «HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders»)

13
задан Aleksei Vasiliev 6 November 2010 в 18:35
поделиться