Лучший способ обработки и отображения файлов без расширений на платформе Netbeans?

У меня есть проект, который я должен решить для компании, в которой я работаю, и это в основном означает, что я должен обрабатывать и отображать файлы без какого-либо расширения файла. Я не могу изменить способ создания этих файлов, поэтому мне нужен совет о том, как лучше всего обращаться с такими файлами. API DataSystems, кажется, заботится только о файлах с расширениями, значит ли это, что я должен использовать только API FileSystems? Если это так, я был бы признателен за некоторые образцы классов Node и Children, использующих FileObject как то, что они на самом деле представляют.

Большое спасибо, очень ценю любую помощь.

Потратив некоторое время на чтение материалов, доступных на веб-сайте платформы Netbeans, у меня осталось несколько вопросов относительно моей цели, упомянутой выше.

Чтобы уточнить мою цель: 1. У меня есть папка (вне пути установки приложения), которая содержит файлы без расширений. Каждый файл представляет собой точку интереса, содержащую текстовые данные, разделенные пробелами, которые позже будут использоваться для построения графиков различными графическими программами. 2. Я хочу отображать эти файлы как узлы в одном модуле с, возможно, отдельным модулем для обновления этих файлов. Обновление включает в себя кнопку, которая вызывает загрузку сжатого файла, распаковку этого файла, чтение его содержимого и интерпретацию этого содержимого, чтобы определить, как будут обновляться текстовые файлы данных. 3. Возможно, есть прослушиватели изменения содержимого на объектах FileObject, представленных узлами, чтобы отображать/указывать (возможно, через изменение значка?) изменение содержимого файла. 4. Я также хочу иметь возможность отображать текстовые данные (только для чтения), содержащиеся в FileObject, представленном выбранным узлом, в текстовом редакторе, но это все, что мне нужно сделать с этими FileObjects и узлами, которые представлять их. 4. Есть еще один модуль, отображающий все сжатые файлы, загруженные на сегодняшний день (при условии, что я снова захочу отобразить все файлы в папке «скачать») с помощью Nodes и ExplorerView API. Здесь я, возможно, захочу добавить «семантическое значение» к этим файлам, поскольку они не являются обычными файлами zip/jar, таким образом, возможно, используя DataSystems API для этого модуля.

Самый главный вопрос, который мне сейчас приходит в голову, — как правильно представить все файлы в этой папке в виде узлов и как будут выглядеть подкласс этого узла и соответствующий класс Children. В примерах используется «APIObject», я хочу заменить этот объект на FileObject, если нет необходимости использовать API DataSystems в первом модуле?

Еще раз хочу поблагодарить вас за любую помощь, это действительно ценится.


person RSwan    schedule 05.10.2011    source источник


Ответы (2)


Хорошо, прочитайте ваше обновление. Итак, я бы сказал, что определенно в какой-то момент вам понадобятся DataObjects. Ключевые моменты:

  1. Чтобы «связать» DataObjects с FileObjects, вам нужен DataLoader. Это фабрика DataObjects, которая активируется только для некоторых файлов. В принципе:

    DataObject dataObject = DataObject.find(fileObject);
    

    См. http://wiki.netbeans.org/DevFaqDataLoader.

  2. Хотя для DataLoader обычно используется расширение файла для подтверждения типа файла, это не единственный способ. Действительно, DataLoaders используют типы MIME, а класс MIMEResolver можно использовать для присвоения типа MIME данному файлу. Опять же, проще всего посмотреть на расширение, но ваш код также может посмотреть на содержимое, чтобы угадать (http://wiki.netbeans.org/DevFaqFileRecognition). В основном вы должны реализовать свой MIMEResolver с помощью одного метода:

    public String findMIMEType (FileObject fileObject);
    

который может делать все, что захочет, вы регистрируете MIMEResolver в системе (см. files/HOWTO-MIME.html" rel="nofollow">http://bits.netbeans.org/dev/javadoc/org-openide-filesystems/org/openide/filesystems/doc-files/HOWTO-MIME.html< /a> для подробностей).

На этом этапе DataObject.find() сможет создать экземпляр вашего собственного подкласса DataObject.

  1. DataObject имеет функцию createNodeDelegate(), которую можно использовать для создания узла, чтобы поместить его в представление для рендеринга. Он будет автоматически отображаться с именем DataObject, которое по умолчанию является именем FileObject. Если я правильно помню (но на данный момент я не уверен), платформа сама по себе должна быть в состоянии создать правильный объект данных для каталога, который автоматически создал бы узел с дочерними элементами для каждого содержащегося файла.

  2. Для просмотра содержимого вы можете взглянуть на Editor API. К сожалению, я не знаком с ним, но, вообще говоря, его следует снова активировать с помощью типов MIME, которые связывают тип MIME, который вы ранее определили, со стилем «обычный текст». Посмотрите здесь http://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/doc-files/api.html и не беспокойтесь о длине документа, так как он также объясняет такие вещи, как изменение содержимого, которые вам не интересны.

  3. Как только вы сможете визуализировать дерево файлов, используя FilterNode, чтобы скрыть некоторые дочерние элементы от просмотра (см. http://wiki.netbeans.org/DevFaqNodesDecorating).

person Fabrizio Giudici    schedule 05.10.2011
comment
Спасибо, это самое полезное! - person RSwan; 11.10.2011

Сначала несколько основных моментов:

  1. Файлы представлены API файловых систем, поэтому вы наверняка будете его использовать. Не проблема, что FileObject управляет расширением, так как это будет строка "" в случае, если ваши файлы не имеют расширения.

  2. DataObjects — это еще одна часть. Вы используете их для представления сущности модели, которая поддерживается файлом (точнее, FileObject) и имеет некоторую семантику (которую вы обычно реализуете путем создания подкласса DataObject и добавления методов). Под «некоторой семантикой» я подразумеваю нечто большее, чем просто набор данных, таких как последовательность байтов, но данные, которые интерпретируются. Я имею в виду: если ваше приложение будет предоставлять типичные функции проводника файловой системы, то есть копирование, перемещение, удаление файлов и т. д., API FileSystems достаточно: вам не нужно интерпретировать данные. Если вы, например. хотите реализовать приложение для обработки фотографий, которое также предлагает такие функции, как фильтрация и т. д., вполне вероятно, что вам понадобится подкласс PhotoDataObject DataObject, куда вы поместите дополнительную семантику. Это подразумевает наличие методов для чтения данных из файла и создания, например. BufferedImage или другое представление. Это всего лишь грубый способ представить вещи, но мы можем уточнить детали позже. DataObjects, конечно, являются дополнительной сложностью по сравнению с FileObjects, и вы должны использовать их только в том случае, если они вам нужны.

  3. Ваш вопрос об узлах и дочерних элементах связан с отображением материала, а не с манипулированием им (для чего достаточно DataObject и FileObject). Nodes API является общим для создания модели представления, то есть структуры данных, отображаемой на экране. Это может быть что угодно, включая FileSystem или DataObject. Я не вижу особых проблем с файлами без расширения, так как если у них нет расширения, они будут просто отображаться без расширения. В любом случае, создавая подклассы Node, вы можете управлять тем, как что-то отображается на экране по вашему желанию.

Чтобы предоставить осмысленный пример кода, требуется, чтобы вы указали больше того, что вам нужно, с точки зрения, которую я только что описал в пунктах 1, 2 и 3.

person Fabrizio Giudici    schedule 05.10.2011
comment
Большое спасибо за ваш ответ! Я отредактировал свой вопрос, чтобы уточнить, чего я пытаюсь достичь. - person RSwan; 05.10.2011