По какой-то причине мне иногда нужно найти папку «Мои документы» текущего пользователя в Windows в программе Java, чтобы прочитать некоторые файлы.Но, насколько я могу судить, нет способа сделать это без серьезных недостатков.
Первый неправильный путь: System.getProperty ("user.home");
Почему он выигралне работает:
- Возвращает только папку \ username \;Мне нужно добавить "\ 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")