2009-10-01 13 views
11

Chcę zapisać plik w folderze "Moje dokumenty" użytkownika.Jak znaleźć folder "Moje dokumenty" w Javie

Starałem się lokalizację tak:

System.getenv("USERPROFILE") + "\\My Documents\\" 

Wtedy zdałem sobie sprawę, to nie będzie działać w systemie, w którym język jest ustawiony na inny język, na przykład francuski.

Czy istnieje inny sposób na sprawne uzyskanie folderu "Moje dokumenty"?

Odpowiedz

14

Jeśli nie przeszkadza w zależności od Swing można podobno użyć tej sztuczki:

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()); 
    } 
} 

(źródło: http://www.rgagnon.com/javadetails/java-0572.html)

+2

W systemie Mac OS X, wynikiem użycia tego jest jeden katalog zbyt wysoko. – Trejkaz

+0

Odsyła mnie to do folderu, który nie istnieje ... c: \ Users \ \ Documents. Folder dokumentów w moim systemie nazywa się My Documents. – JavaLatte

+0

@JavaLatte Czy jesteś pewien, że to jest prawdziwe imię? Explorer wyświetli go jako "Moje dokumenty", nawet jeśli katalog ma nazwę "Dokumenty", jeśli klikniesz pasek ścieżki, zobaczysz prawdziwą ścieżkę. –

0
+0

Nie działa dla java – abhilash

+1

Czy "% CSIDL_PERSONAL% \ doc.txt" nie otworzy pliku doc.txt w folderze Moje dokumenty, nawet w Javie? –

+0

Prawdopodobnie tak, ale twój program nie będzie już niezależny od platformy. Wydaje się, że lepiej zastosować sztuczkę Swing FileSystemView, jak to sugerowano powyżej, ponieważ działa ona na wielu platformach i oznacza, że ​​postępujesz zgodnie z tymi samymi ustawieniami, co inne aplikacje Java (zawsze miło jest być spójnym). –

5

Jest winfoldersjava JNI extension dostępu specjalne nazwy folderu w Javie.

Strona winfoldersjava opisuje również inny sposób przy użyciu Swing:

Ponadto, jeśli trzeba tylko „My Documents” ścieżkę i nie przeszkadza wzruszającą Swing może nie trzeba WinFoldersJava. Zamiast tego można użyć metody javax.swing.filechooser.FileSystemView.getFileSystemView(). GetDefaultDirectory().

0

lokalizacja dla tego katalogu mogą być zmieniane przez każdego użytkownika, więc nie zależy to tylko od lokalizacji.
Aby znaleźć lokalizację tego folderu, należy przejrzeć rejestr. polecenia systemu Windows, aby to zrobić jest:

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User 
Shell Folders" /v personal 

lub

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 
Folders" /v personal 

nie wiem, które miejsce faktycznie, ale to jeden z nich.

+0

te wpisy rejestru nie są tworzone, dopóki jeden z innych programów o nazwie Shell APIs –

9

Odnośnie wydajności, to szybciej niż przy użyciuJFileChooser:

FileSystemView.getFileSystemView().getDefaultDirectory().getPath() 

W moim komputerze, JFileChooser podejście potrzebne 300ms, a nazywając FileSystemView bezpośrednio potrzebne mniej niż 100ms.

Powiązane problemy