По какой-то причине мне иногда нужно найти текущую папку "Мои документы" в Windows в программе Java для чтения некоторых файлов. Но, насколько я могу судить, нет никакого способа сделать это, что не сильно испорчено.
Первый неправильный путь: System.getProperty( "user.home" );
Почему это не сработает:
- Он возвращает только \username\folder; Мне нужно добавить "\ Documents \" до конца, чтобы получить папку "Документы"... и это работает только на английском языке.
- Sun-ошибки 6519127 и 4787931. Java находит домашнюю папку пользователя в Windows, читая устаревший раздел реестра *, чтобы найти Рабочий стол, затем родитель; этот метод имеет несколько известных проблем, которые могут привести к возврату полностью неправильной папки. Ошибки составляют 3,75 года и 8 лет без каких-либо исправлений.
Второй неправильный способ: использование программы для чтения реестра, чтобы получить личную папку пользователя, которая является My Documents (но 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" )