Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Путешествие по файловой системе: класс javax.swing.filechooser.FileSystemView
Класс javax.swing.filechooser.FileSystemView – это библиотека методов для работы с объектами типа File. Эта библиотека, прежде всего, позволяет перемещаться по файловой системе (переходить к «родителю» и получать список «детей»), причем в современном стиле: корнем иерархии для Windows служит рабочий стол «Desktop», в нем имеется выход в «My Computer» и локальную сеть, и т. д. Кроме того, библиотека FileSystemView открывает доступ к дополнительным свойствам файлов, подкаталогов и иных, «нефайловых» элементов файловой системы типа «Desktop».
Чтобы использовать FileSystemView, нужно вначале получить экземпляр библиотеки с помощью статического метода getFileSystemView():
FileSystemView fsv=FileSystemView.getFileSystemView();
Это единственный способ получить экземпляр: класс FileSystemView – абстрактный и не имеет открытых наследников. В действительности указанный метод возвращает экземпляр одного из закрытых классов-наследников, разных для разных операционных систем.
Получив экземпляр, можно использовать следующие методы:
public File getParentDirectory(File dir)
public File getChild(File parent, String fileName)
public File createFileObject(File dir, String filename)
public File createFileObject(String path)
public File[] getFiles(File dir, boolean useFileHiding)
public File[] getRoots()
Эти методы «перекрывают» основные методы и конструкторы класса File, предназначенные для «навигации» по файловой системе. Данные методы работают уже в «современном» стиле. Если мы попытаемся подняться от любого файла (созданного либо через createFileObject, либо конструктором класса File) до корня иерархии, последовательно вызывая метод getParentDirectory, то под Windows мы в конце концов доберемся до каталога «Desktop». Метод getRoots также честно возвращает этот единственный каталог. Если мы будем считывать дерево каталогов, вызывая getFiles для корневого каталога «Desktop», затем для его элементов, затем для их элементов и т. д., мы увидим примерно то же самое, что видит пользователь в любом стандартном диалоге выбора файла Windows: «My Com-puter», «My Network Places» и т. д.
Очень поучительно написать тест, считывающий «верхние этажи» дерева каталогов с помощью этих методов и распечатывающий для каждого элемента (объекта File) результаты вызовов toString(), getAbsolutePath(), getCano-nicalPath(), getParent(), listFiles(), а также имя класса getClass(). Также интересно распечатать аналогичную информацию для каталогов, получаемых подъемом к корню вызовами getParentDirectory от произвольных обычных маршрутов, созданных конструктором класса File.
Оказывается, что классы объектов File, полученных таким способом, в действительности часто являются наследниками стандартного класса java.io.File, чаще всего (в случае Windows) это класс sun.awt.shell.Win32ShellFolder. Этого следовало ожидать. Обычный класс File в принципе не способен представить такую сущность, как «My Computer». Действительно, практически любой маршрут, хранящийся в объекте File, который мы бы могли придумать для обозначения «My Computer», одновременно соответствовал бы какому-нибудь вполне допустимому файлу, а его методы вроде getParent() вообще возвращали бы ерунду.
На самом деле любой вызов getParentDirectory возвращает для Windows объект «внутреннего» класса фирмы Sun sun.awt.shell.Win32ShellFolder (наследника File), причем если исходный маршрут был относительным, он автоматически преобразуется в абсолютный. У такого объекта методы getParent() и listFiles() работают уже «правильно», так же, как getParentDirectory и getFiles. Метод list(), судя по всему, возвращает имена только для «обычных» файлов/подкаталогов, опуская имена дисков или элементов типа «My Computer».