2

我有一个项目,我必须为我工作的公司处理,这基本上意味着我必须处理和显示没有任何文件扩展名的文件。我无法改变他们生成这些文件的方式,所以我需要一些关于处理这些文件的最佳方式的建议。DataSystems API 似乎只处理带有扩展名的文件,那么这是否意味着我必须只使用 FileSystems API?如果是这样,我将不胜感激使用 FileObject 作为它们实际代表的 Node 和 Children 类的一些示例。

非常感谢,非常感谢您的帮助。

在花了一些时间阅读 Netbeans 平台网站上提供的材料后,我对我的上述目标提出了一些问题。

为了澄清我的目标: 1. 我有一个文件夹(在应用程序安装路径之外),其中包含没有扩展名的文件。每个文件代表一个兴趣点,包含空格分隔的文本数据,这些数据稍后将被各种绘图软件用于绘制图形。2. 我想将这些文件显示为一个模块中的节点,可能还有一个单独的模块来更新这些文件。更新将包含一个按钮,该按钮将导致下载压缩文件、解压缩该文件、读取其内容并解释该内容以确定如何更新文本数据文件。3. 也许在节点表示的 FileObjects 上有内容更改侦听器,以便显示/指示(可能通过图标更改?)文件内容的更改。4. 我还希望能够在文本编辑器中显示由单击的节点表示的 FileObject 中包含的文本数据(只读),但这就是我需要能够对这些 FileObjects 和代表它们的节点做的所有事情. 4. 在 Nodes 和 ExplorerView API 的帮助下,让另一个模块显示迄今为止下载的所有压缩文件(假设我想再次显示“下载”文件夹中的所有文件)。在这里,我可能想为这些文件添加“语义含义”,因为它们不是普通的 zip/Jar 文件,因此可能会为此模块使用 DataSystems API。在 Nodes 和 ExplorerView API 的帮助下,让另一个模块显示迄今为止下载的所有压缩文件(假设我想再次显示“下载”文件夹中的所有文件)。在这里,我可能想为这些文件添加“语义含义”,因为它们不是普通的 zip/Jar 文件,因此可能会为此模块使用 DataSystems API。在 Nodes 和 ExplorerView API 的帮助下,让另一个模块显示迄今为止下载的所有压缩文件(假设我想再次显示“下载”文件夹中的所有文件)。在这里,我可能想为这些文件添加“语义含义”,因为它们不是普通的 zip/Jar 文件,因此可能会为此模块使用 DataSystems API。

在这一点上,我心中最主要的问题是将这个文件夹中的所有文件表示为节点的正确方法是什么,以及这个节点的子类和相应的 Children 类会是什么样子。在示例中使用了“APIObject”,如果不需要在第一个模块中使用 DataSystems API,我想着手用 FileObject 替换该对象?

再次感谢您的帮助,真的很感激。

4

2 回答 2

1

好的,阅读您的更新。所以,我肯定在某些时候你需要DataObjects。要点:

  1. 要将 DataObjects “链接”到 FileObjetcs,您需要一个 DataLoader。它是 DataObjects 的工厂,仅对某种文件激活。基本上:

    DataObject dataObject = DataObject.find(fileObject);
    

    请参阅http://wiki.netbeans.org/DevFaqDataLoader

  2. 虽然 DataLoader 使用文件扩展名来确认文件类型很常见,但这并不是唯一的方法。实际上,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 子类。

  1. DataObject 有一个 createNodeDelegate() 可用于创建一个节点以放入视图进行渲染。它将使用 DataObject 的名称自动呈现,默认情况下是 FileObject 的名称。如果我没记错的话(但目前我不确定),平台本身应该能够为目录创建正确的 DataObject,这将自动为每个包含的文件创建一个带有子节点的节点。

  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)。

于 2011-10-05T16:26:23.397 回答
0

首先,一些基本点:

  1. 文件由 Filesystems API 表示,因此您肯定会使用它。FileObject 管理扩展名不是问题,因为如果您的文件没有扩展名,它将是一个 "" 字符串。

  2. DataObjects 是另一部分。您使用它们来表示由文件(准确地说是 FileObject)支持的模型实体,并且有一些语义(通常通过子类化 DataObject 和添加方法来实现)。对于“一些语义”,我的意思不仅仅是拥有一堆数据,例如字节序列,而是被解释的数据。我的意思是:如果您的应用程序要提供文件系统资源管理器的典型功能,即复制、移动、删除文件等......,FileSystems API 就足够了:您不需要解释数据。例如,如果您想实现一个照片处理应用程序,它还提供过滤等功能......,您可能需要一个 PhotoDataObject 子类化 DataObject 来放置额外的语义。这意味着具有从文件中读取数据并创建例如 BufferedImage 或其他表示的方法。这只是一个粗略的介绍方式,但我们可以稍后细化到细节。DataObjects 当然比 FileObjects 更复杂,只有在需要时才应该使用它们。

  3. 您关于节点和子项的问题与显示内容有关,而不是操纵它(DataObject 和 FileObject 就足够了)。Nodes API 是用于创建表示模型的通用 API,表示模型是在屏幕上呈现的数据结构。它可以是您想要的任何东西,当然包括 FileSystem 或 DataObject。我没有看到没有扩展名的文件有任何具体问题,就好像它们没有扩展名一样,它们只会在没有扩展名的情况下呈现。在任何情况下,子类化 Node 您都可以根据需要控制内容在屏幕上的呈现方式。

要提供一些有意义的代码示例,您需要指定更多您需要的内容,从我刚刚在第 1、2 和 3 点中描述的角度来看。

于 2011-10-05T09:49:22.990 回答