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