Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Надо надеяться, что в будущих версиях Java фирма Sun оптимизирует метод isParent, устранив оттуда перебор. Для подавляющего числа ситуаций, когда каталог вполне «нормальный» (что можно определить вызовом isFileSystem), перебор совершенно не нужен. Пока что я рекомендую, если это возможно и допустимо логикой программы, всегда конвертировать каталоги, полученные от класса FileSystemView, в обыкновенные объекты File:
f= new File(f.getPath());
Например, это можно проделать с каталогом getDefaultDirectory(), если программе нужно просто прочитать оттуда какие-то конфигурационные или другие файлы. Кроме того, это почти всегда можно сделать, если выполнено условие:
fsv.isFileSystem(f)
Путешествие по файловой системе: недокументированный класс sun.awt.shell.ShellFolder
Как оказывается, даже с помощью класса FileSystemView нельзя написать программу, адекватно работающую с файловыми системами современной Windows XP. В этой версии Windows большое значение имеют «ссылки» (links) или «ярлыки». В ранних версиях Windows это были файлы с расширением «.lnk», сейчас к ним добавились специально организованные подкаталоги. С точки зрения пользователя «ярлык», ссылающийся на некоторый каталог, должен вести себя подобно этому каталогу. Щелчок по «ярлыку» (например, в диалоге выбора файла) должен открывать этот каталог. Доступ к локальной сети из основной файловой иерархии в Windows XP организован именно через «ярлыки»: компьютеры пользователей-«соседей» («My Network Places») представлены маленькими виртуальными подкаталогами-«ярлыками» в локальном дисковом каталоге текущего пользователя. (Эти подкаталоги физически находятся внутри скрытого подкаталога NetHood, лежащего в главном каталоге пользователя.)
К сожалению, в текущей версии Java не предусмотрено никаких документированных средств для работы с «ярлыками». С точки зрения стандартных библиотек Java файл с расширением «.lnk» – это просто некоторый двоичный файл с недокументированным строением, а подкаталог-«ярлык» из «My Network Places», ссылающийся на другой компьютер – это самый обычный подкаталог с двумя служебными файлами. В результате дерево файловой системы, построенное с помощью документированных библиотек Java в Windows XP, оказывается принципиально неполным – содержимое компьютеров локальной сети туда не попадает. Это особенно заметно при использовании стандартного диалога выбора файла JFileChooser – компьютеры из «My Network Places» там видны, но попытка зайти на них заканчивается, мягко говоря, странно.
К счастью, фирма Sun уже реализовала механизм обработки файлов-«ссылок» Microsoft Windows, хотя пока не документировала его. Это уже упоминавшийся выше класс sun.awt.shell.ShellFolder. Помимо прочих методов, имеющих документированные эквиваленты в классе FileSystemView, класс ShellFolder содержит следующие два метода:
public abstract boolean isLink();
public abstract ShellFolder getLinkLocation()
throws FileNotFoundException
Вот как можно ими пользоваться:
public static boolean isLink(File f) {
try {
return sun.awt.shell.ShellFolder
.getShellFolder(f).isLink();