我有一个项目,我必须为我工作的公司解决,它基本上意味着我必须处理和显示没有任何文件扩展名的文件。我无法改变他们生成这些文件的方式,所以我需要一些关于处理这类文件的最佳方法的建议。DataSystems API似乎只处理带有扩展名的文件,这是否意味着我必须只使用FileSystems API ?如果是这样的话,我将欣赏一些使用FileObject作为它们实际代表的Node和Children类的示例。
非常感谢你的帮助。
在花了一些时间阅读了Netbeans平台网站上提供的材料之后,我对上面提到的目标还有一些问题。
澄清我的目标:1. 我有一个文件夹(在应用程序安装路径之外),其中包含没有扩展名的文件。每个文件表示一个兴趣点,其中包含用空格分隔的文本数据,这些数据稍后将被各种绘图软件用于绘制图形。2. 我想将这些文件显示为一个模块中的节点,可能还有一个单独的模块用于更新这些文件。更新将包含一个按钮,该按钮将导致下载压缩文件,解压缩该文件,读取其内容并解释该内容,以确定如何更新文本数据文件。3.也许在由节点表示的FileObjects上设置内容更改监听器,以便显示/指示(可能通过图标更改?)文件内容的更改。4. 我还希望能够在文本编辑器中显示由单击的节点表示的FileObject中包含的文本数据(只读),但这就是我需要能够对这些FileObject和表示它们的节点所做的全部工作。4. 在节点和ExplorerView API的帮助下,有另一个模块显示迄今为止下载的所有压缩文件(假设我再次想要在"下载"文件夹中显示所有文件)。在这里,我可能想要添加"语义"到这些文件,因为它们不是一般的zip/Jar文件,因此可能使用DataSystems API的这个模块。
在这一点上,我脑海中最主要的问题是,将这个文件夹中的所有文件表示为节点的正确方法是什么,以及这个节点的子类和相应的子类是什么样子的。在示例中使用"APIObject",我想设置关于用FileObject替换该对象,如果没有必要在第一个模块中使用DataSystems API ?我想再次感谢你的帮助,真的很感激。
好的,看你的更新。我想说,在某些时候你肯定需要数据对象。要点:
-
要"链接"数据对象到文件对象,你需要一个数据加载器。它是一个dataobject工厂,只对某些类型的文件激活。基本上:
DataObject dataObject = DataObject.find(fileObject);
见http://wiki.netbeans.org/DevFaqDataLoader
-
虽然DataLoader通常使用文件扩展名来支持文件类型,但这并不是唯一的方法。实际上,数据加载器使用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子类。
-
DataObject有一个createNodeDelegate(),可以用来创建一个节点,放入视图中进行渲染。它将使用DataObject的名称自动呈现,默认情况下是FileObject的名称。如果我没有记错的话(但现在我不确定),平台本身应该能够为目录创建适当的DataObject,它将自动为每个包含的文件创建一个带有子节点的Node。
-
要查看内容,您可能需要查看Editor API。不幸的是,我不熟悉它,但一般来说,它应该可以通过使用MIME类型再次激活,它将您之前定义的MIME类型关联到"纯文本"样式。查看此处http://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/doc-files/api.html,不要担心文档的长度,因为它还解释了您不感兴趣的内容,例如更改内容。
-
一旦你能够渲染一个文件树,通过使用FilterNode隐藏一些子视图(参见http://wiki.netbeans.org/DevFaqNodesDecorating)。
首先,一些基本要点:
-
文件由文件系统API表示,所以您肯定会使用它。这不是一个问题,FileObject管理扩展名,因为它将是一个"字符串,以防您的文件没有扩展名。
-
DataObjects是另一部分。您使用它们来表示由文件(确切地说是FileObject)支持的模型实体和具有一些语义(通常通过子类化DataObject并添加方法来实现)。对于"某些语义",我的意思不仅仅是拥有一堆数据(如字节序列),而是要解释的数据。我的意思是:如果你的应用程序要提供文件系统资源管理器的典型功能,即复制,移动,删除文件等…, FileSystems API就足够了:您不需要解释数据。例如,如果你想实现一个照片处理应用程序,它还提供过滤等功能…,你很可能需要有一个PhotoDataObject子类DataObject,在那里你放置额外的语义。这意味着要有从文件中读取数据并创建BufferedImage或其他表示的方法。这只是一种粗略的介绍方式,但我们可以稍后细化细节。数据对象当然比文件对象更复杂,只有在需要时才应该使用它们。
-
您关于节点和子节点的问题与显示内容有关,而不是操纵它(其中DataObject和FileObject就足够了)。Nodes API是用于创建表示模型的通用API,表示模型是在屏幕上呈现的数据结构。它可以是您想要的任何东西,当然包括文件系统或数据对象。对于没有扩展名的文件,我没有看到任何具体的问题,就好像它们没有扩展名一样,它们就会在没有扩展名的情况下呈现。在任何情况下,子类化节点你可以控制东西在屏幕上呈现的方式,因为你想。
要提供一些有意义的代码示例,需要您在我刚刚在第1、2和3点中描述的透视图中指定更多需要的内容。