Per qualsiasi motivo, a volte ho bisogno di trovare la cartella Documenti dell'utente corrente su Windows in un programma Java per leggere alcuni file. Ma per quanto posso dire, non c'è modo di farlo che non sia gravemente imperfetto.Metodo corretto per trovare la cartella Documenti dell'utente su Windows con Java?
Il primo modo errato: System.getProperty ("user.home");
Perché non funzionerà:
- Esso restituisce solo la cartella \ nomeutente \; Avrei bisogno di aggiungere "\ Documenti \" alla fine per ottenere la cartella Documenti ... e che funziona solo in inglese.
- Sun bugs 6519127 e 4787931. Java trova la cartella home dell'utente su Windows leggendo una chiave di registro deprecata * per trovare il Desktop e quindi il padre; questo metodo ha più problemi noti che possono facilmente restituire una cartella completamente sbagliata. I bug sono 3.75 anni e 8 anni senza correzioni.
Il secondo modo errato: Utilizzare un programma di lettura del Registro di sistema per ottenere la cartella Personale dell'utente, che è Documenti (ma i18n'd).
Perché non funziona:
Mentre corregge il problema solo in inglese, sta ancora utilizzando la stessa area di registro deprecata, quindi i bug si applicano ancora ad esso.
La chiave di registro deprecata dice di utilizzare una chiamata nativa (SHGetKnownFolderPath) che ovviamente non posso fare da Java.
Il terzo modo sbagliato:
JFileChooser fr = new JFileChooser();
FileSystemView fw = fr.getFileSystemView();
File documents = fw.getDefaultDirectory();
Perché non funziona: funziona benissimo!
Tranne quando non lo fa. Mentre avevo un programma che usava questo aperto e funzionante in background, ho aperto un gioco DirectX (Fallout: New Vegas). Il programma Java immediatamente termina senza traccia dello stack. Sempre riproducibile (per me in quel gioco, e chissà cos'altro). Impossibile trovare il sole # bug.
Quindi esiste un metodo per trovare la cartella Documenti di un utente, su Windows, da Java, che non ha problemi noti?
(Questo è un bel grande domanda.)
* (La chiave è "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders")
Uguale [come trovare “My Documents” cartella ] (http://stackoverflow.com/questions/1503555/how-to-find-my- documenti-cartella). Si parla winfoldersjava, un wrapper JNI intorno SHGetSpecialFolderPath. Poiché stai utilizzando la funzionalità specifica di Windows, JNI dovrebbe essere a posto. –
Hai davvero isolare questi arresti per il frammento di codice dalla terza via? Perché questo metodo sembra essere usato da sbalzi propria finestra di dialogo Apri file (JFileChooser) così sembra un sacco di applicazioni Java avrebbe sofferto da esso? –
http://stackoverflow.com/questions/1503555/how-to-find-my-documents-folder –