Лучший способ обрабатывать и отображать файлы без расширений файлов на платформе Netbeans? - PullRequest
2 голосов
/ 05 октября 2011

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 05 октября 2011

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

  1. Чтобы "связать" объекты DataObject с FileObjetcs, вам необходим 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 в системе (подробности см. http://bits.netbeans.org/dev/javadoc/org-openide-filesystems/org/openide/filesystems/doc-files/HOWTO-MIME.html).

На этом этапе DataObject.find () сможет создать свой собственный подкласс DataObject.

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

  2. Для просмотра содержимого вы можете взглянуть на 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).

0 голосов
/ 05 октября 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.

...