Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
На основе такого маршрута можно создать работоспособный объект java.io.File и в случае файла передать его прочим классам пакета java.io.* для работы с этим файлом. Для такого маршрута можно традиционными средствами класса java.io.File перейти к родительскому каталогу (File.getParent()), и получится вполне корректный новый маршрут, если только текущий маршрут не является корнем диска или верхнеуровневым псевдонимом подкаталога для компьютера из локальной сети. Наконец, если экземпляр класса java.io.File соответствует обычному каталогу (в том числе корню диска), то традиционные средства этого класса позволяют корректно получить все подкаталоги и файлы, лежащие внутри него, и работать с ними.
Пока приложение нуждается только в манипуляциях с файлами внутри некоторого обычного каталога (имя которого получено из диалога выбора файла или из конфигурационного файла), проблем не возникает. Такая ситуация достаточно типична для «невизуальных» и даже для многих визуальных приложений, в которых вся работа с диском сводится к манипуляциям с файлами внутри некоторого специального каталога, отведенного под это приложение. Но если нужно, например, показать пользователю полное дерево всех доступных файлов, включая сетевое окружение, причем стандартные диалоги выбора файла почему-либо не устраивают, – тут средства пакета java.io.* недостаточны. Другой пример нехватки возможностей java.io.*: этот пакет не способен определить каталог документов текущего пользователя Windows 2000/XP, а это очень неплохая «точка отсчета» для размещения рабочих файлов приложения.
Чтобы поддержать современные файловые системы, компания Sun разработала новый отдельный пакет javax.swing.filechooser.* Он размещен внутри графической библиотеки Swing и рассчитан на использование совместно с диалогом выбора файла javax.swing.JFileChooser. Тем не менее возможности, предлагаемые этим пакетом, точнее, классом javax.swing.filechooser.FileSystemView, не имеют никакого отношения к визуальному интерфейсу. В действительности методы этого класса куда логичнее смотрелись бы в пакете java.io.*
Сегодня средства для анализа и управления файловой системой в Java распределены по двум классам: java.io.File и javax.swing.filechooser.FileSystemView. Классы эти непохожи по организации и частично перекрывают возможности друг друга, так что порой не так просто определить, какой из них выбрать.
Попробуем разобраться в этих двух классах.
Путешествие по файловой системе: класс java.io.File
Класс java.io.File, вопреки названию, является представлением не собственно файла, а маршрута к файлу или подкаталогу. (И почему его не назвали, скажем, «Path»?) Создание экземпляра File никак не связано с созданием файла, для работы с файлами служат потоки ввода-вывода. По сути, класс File можно считать специализированным вариантом класса String, рассчитанным на работу с маршрутами к файлам/подкаталогам и, что отличает его от String, допускающим создание наследников.
Экземпляр File обычно создается одним из конструкторов:
public File(String pathname)
public File(File parent, String child)
public File(String parent, String child)
Смысл их достаточно очевиден. В качестве pathname (или parent) нужно указывать маршрут к файлу/подкаталогу (соответственно к каталогу, содержащему файл/подкаталог), например, «/tmp/a», «myfile.txt» или «c:abc.java». Путь (маршрут) считается абсолютным, если начинается со слэша (/ или ) или c буквы диска с последующим слэшем в случае DOS/Windows. В противном случае путь считается относительным и отсчитывается от текущего каталога операционной системы.
Разработчики Java разрешили при создании экземпляра File для разделения каталогов в маршруте всегда использовать «универсальный» прямой слэш /, помимо стандартного разделителя File.separator ( в случае Windows).
Преобразование объекта File в строку (метод toString() или полностью эквивалентный ему getPath()), как и следовало ожидать, возвращает исходный маршрут, который был передан в конструктор. Но все прямые слэши при этом заменяются на File.separator. Вообще, все методы класса File, возвращающие путь к файлу в виде строки, возвращают его в «нормализованном» виде, т.е. с заменой всех прямых слэшей на File.separator.