2013-05-22 4 views
2

В нашей компании у нас есть несколько глобальных приложений Java, используемых нашими сотрудниками. Некоторые из них позволяют пользователям создавать отчеты, которые всегда сохраняются в их домашнем каталоге. Домашние каталоги являются сетевыми дисками и им назначается буква диска U:/, когда пользователь входит в систему на своем компьютере. Таким образом, в приложениях путь к целевому каталогу отчета является просто жестким кодом U:\Reports.Запись в библиотеку Windows 7 с Java-приложением

Однако мы скоро перейдем от Windows XP к Windows 7 и используем другую структуру: пользователи получат новые домашние каталоги на других серверах, которые будут доступны в Библиотеке документов в Windows 7 Explorer. Там больше не будет букв с дисками.

Таким образом, новый путь для каталога отчетов должен быть Libraries\Documents\My Documents\Reports. Но как я могу получить доступ к этому пути в Java? Как я могу найти фактический, абсолютный путь UNC (если это даже необходимо)?

Я не могу просто использовать \\theserver\users\username, так как у нас есть несколько серверов (по одному для каждого континента). Я должен использовать эту папку в библиотеке документов Windows 7.

ответ

2

Во-первых, «Библиотеки» не являются фактическим местоположением файловой системы. Библиотеки указывают на расположение файловой системы. Если вы щелкните правой кнопкой мыши по библиотеке в win7 и просмотрите ее свойства, вы увидите фактическое местоположение (-ы) файловой системы, на которое оно указывает. По умолчанию библиотека документов указывает на C:\Users\{userName}\Documents. В любом случае, вы можете получить доступ к домашней директории текущего пользователя с помощью:

System.getProperty("user.home") 

Таким образом, чтобы получить доступ к папке документов:

File documentsFolder = new File(System.getProperty("user.home") + "\\Documents"); 
0

Вы можете использовать ЮНА:

import com.sun.jna.Native; 
import com.sun.jna.platform.win32.Shell32; 
import com.sun.jna.platform.win32.ShlObj; 
import com.sun.jna.platform.win32.WinDef; 

... 

    char[] pszPath = new char[WinDef.MAX_PATH]; 
    Shell32.INSTANCE.SHGetFolderPath(null, 
     ShlObj.CSIDL_MYDOCUMENTS, null, ShlObj.SHGFP_TYPE_CURRENT, 
     pszPath); 
    System.out.println(Native.toString(pszPath)); 

Посмотреть Get Windows Special Folders (JNA)

В качестве альтернативы вы можете использовать метод, предоставляемый классом JFileChooser.

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

 Смежные вопросы

  • Нет связанных вопросов^_^