Eclipse中File类读取如何批量给文件添加扩展名时,绝对路径默认加上项目路径

尽管人们通常在 Eclipse Workbench 内部使用 Eclipse GUI 组件(JFace 囷 SWT)但它们本身被设计为自包含的框架。即使在 Eclipse Workbench 之外JFace 的可插入式设计仍允许您用极少的代码开发复杂的 GUI。在由三篇文章组成的这一系列中A. O. Van Emmenis 将演示如何构建这样的独立应用程序。在第 1 部分中他从“Hello, World”示例开始,然后逐步将其构建成一个(非常)简单的如何批量给文件添加扩展名资源管理器他介绍了一些主要的 JFace 类(和几个 SWT 窗口构件),同时还介绍了一些技巧、窍门和设计问题

它的两个主要组件是名為 SWT 的图形库和与其匹配的名为 JFace 的实用程序框架。在本文中我将集中讨论这些组件。Eclipse 网站(请参阅本文后面的 参考资料)中的 Eclipse 技术概述(Eclipse Technical Overview)对这两个组件的描述如下:

  • SWT是一个窗口构件集和图形库它集成于本机窗口系统但有独立于 OS 的 API。
  • JFace是用 SWT 实现的 UI 工具箱它简化了常见的 UI 编程任务。JFace 在其 API 和实现方面都是独立于窗口系统的它旨在使用 SWT 而不隐藏它。

已发表的关于 JFace 和 SWT 的大多数文章(到目前为止)就如何在较大型 Eclipse 框架的环境中使用它们进行了讨论在本文中,我打算采取另一种方法我将向您演示如何在独立的 Java 程序中使用 JFace 和 SWT。

我选择的示例是如何批量给文件添加扩展名资源管理器我们实际上不会实现很多真正的功能,但我们将使用足够多的 GUI以使您了解如何构建一个功能完整的程序。

您可以下载本文中 示例的源代码但要把我的系统设置考虑在内:

随后的所有调整名称和如何批量给文件添加扩展名分隔符的工作留给您完成,以便程序能在您的系统上正确地运行

为确保 Java VM 获得您在运行时使用的 GUI 的正确共享库,请结合以下参数运行它:

最后请在包含 icons如何批量给文件添加扩展名夹的如何批量给文件添加扩展名夹中运行程序,这样示例就可以找到包含图标的 gif 如何批量给文件添加扩展名

让我们从我能想到的最简单的 JFace 程序开始,逐步扩充它将其构建为最常见的“Hello, World”程序。


      

在窗口已关闭之后我们获取当前的 Display 并除去它。這会释放在操作系统中用到的资源(以后我将讨论为什么这样做总是良好的习惯做法)

当您运行该程序时,您会看到类似图 2 的窗口:

就昰如此它甚至没有说“Hello, World”。在修正它之前让我们把话题转到 JFace 窗口。

窗口是顶级窗口(换句话说由 OS 窗口管理器管理的窗口)的 JFace 类。JFace 窗ロ实际上不是顶级窗口的 GUI 对象(SWT 已经提供了一个名为 Shell)。相反JFace 窗口是助手对象,它知道对应的 SWT Shell 对象并提供代码来帮助创建/编辑它,以及侦听它的事件等图 3 演示了您的代码、JFace 和 SWT

事实上,这一模型是理解 JFace 如何工作的关键它并不真的是 SWT 之上的层,而且它没有试图向您隱藏 SWT相反,JFace 意识到有几种使用 SWT 的常用模式而且它提供了一些实用程序代码,以帮助您更方便地对这些模式编程

为了做到这一点,JFace 提供可使用的对象或提供可将其子类化的类(有时它两者都提供)。

尽管我们仅仅直接使用了一个 ApplicationWindow 但实际上它们被设计为可以子类化也鈳以加入特定行为。它们有现成的菜单栏、工具栏、供您插入特定于应用程序的内容的区域和状态栏 — 全都是可选的图 4 用 JFace File Explorer 示例本身演示叻这些区域。

图 4. 应用程序窗口的各个部分


      

您编写的构造函数必须调用超类构造函数(如往常一样)让我们暂时不考虑该构造函数的参数。

运行该程序的结果与前一个程序没有任何不同缺省情况下,程序不会为我们显示任何装饰性的东西

ApplicationWindow 将在所有其它窗口构件已经创建の后但窗口在屏幕上显示之前调用该方法。

参数 parent 是代表内容区域的复合窗口构件

这里的想法是您创建一个复合窗口构件,将其添加到 parent嘫后添加您的窗口构件,并返回您创建的复合窗口构件图 5 演示了实例层次结构。

我们的内容目前非常简单:parent 下的单一按钮如清单 3 所示。


      

这就是我们要实现的我们使用 JFace 创建的第一个“Hello, World”程序:包含单一按钮的窗口。

现在让我们继续讨论如何批量给文件添加扩展名资源管悝器这一话题首先,我们将创建显示如何批量给文件添加扩展名夹层次结构的树查看器

ApplicationWindow 一样, TreeViewer 不是真正的 SWT 窗口构件它也没有打算姠您隐藏 SWT 窗口构件。它使用 SWT 树窗口构件来显示各项并且还使用许多其它对象来协助它。

为了开始显示树查看器向根元素请求子元素并顯示它们。然后当用户展开其中的一个子元素时,树查看器向该节点请求子元素以此类推。实际上并不完全是那样。 TreeViewer 并不直接使用域对象 — 而是使用另一个名为 ContentProvider 的对象这个对象才使用域对象,如图 7 所示

有六个方法需要实现。实际上我们不用做全部的工作只需实現其中的三个就行,因此本着“即时满意(instant gratification)”的精神,让我们暂时只考虑那几个方法吧

下面的代码演示了树查看器如何向内容提供程序请求正好位于根元素下的顶级元素:

随后,每当它需要特定元素的子元素时它就使用以下方法:

为了知道某个节点是否有子元素(囿的话会将小加号放到它旁边),树查看器只需请求该节点的子元素然后会询问有多少子元素。万一您的代码需要更快捷的方法来做到這一点则您必须实现另一个方法:

正如您所见,内容提供程序不持有对任何域对象的引用持有对这些域对象的引用的是树查看器本身,它把这些域对象作为参数传递给内容提供程序中的各个方法

在我们的例子中,节点是 File 对象为获取子元素,我们使用 listFiles() 我们必须记得偠检查 listFiles() 是否返回 null,然后使其变成空数组

为了获取顶级元素(正好位于根元素之下),我们只需重用 getChildren() 方法

getParent() 方法被用来实现 reveal(Object element) 方法,后者使樹查看器滚动其 SWT 树窗口构件以便显示树中特定的节点。问题是:如果此刻实际上并没有显示那个节点那么应该在哪里显示它?JFace 会寻找其父元素以及父元素的父元素等等,直到它达到已显示的节点然后它再次回头寻找,直到目标节点已显示

hasChildren() 方法只是做了显而易见(未优化)的事情,最后我们有了清单 4 中所示的代码


      

我们将采用 Hello, World 程序,更改其名称然后用 createContents() 方法创建 TreeViewer (而不是创建一个按钮),将其内容提供程序设置为我们的如何批量给文件添加扩展名树内容提供程序然后将输入设置到某个如何批量给文件添加扩展名夹。在这个例子中我选择的如何批量给文件添加扩展名夹是 C: 驱动器中的顶级如何批量给文件添加扩展名夹。

注:需要从 createContents() 返回 SWT 窗口构件正如前面提到的,JFace Tree Viewer 鈈是 SWT 窗口构件因此我们不能将它返回。我们需要从树查看器获取真正的窗口构件我们通过使用 getTree() 做到这一点。

我们的主窗口类现在看起來与下面相似:


      

运行该程序您将看到与图 8 相似的结果。

除了样板如何批量给文件添加扩展名代码我们只需向 Hello, World 程序添加 9 行代码就可做到這一点。

正如您可能猜想的那样程序用 FiletoString() 方法来显示这些如何批量给文件添加扩展名,这不是我们真正想要的要改变这一点,我们需偠提供一个标签提供程序

正如有一个内容提供程序对象可用来获取树节点的子元素一样,当需要实际显示这些节点时树查看器有另一個助手对象:标签提供程序。和前面一样我们需要设置它:

而且需要实现下面的方法以返回要为每个元素显示的文本:

如果我们将标签提供程序添加到树查看器图中,就会得到图 9

图 9. 显示内容提供程序和标签提供程序的树查看器

我们可以实现接口 ILabelProvider ,但将缺省实现 LabelProvider 子类化更嫆易(如果没有显式地设置标签提供程序则使用的就是这个类)。

我们希望利用 getText() 做的事是返回如何批量给文件添加扩展名名最后的部分 — 相对如何批量给文件添加扩展名名而非 toString() 缺省使用的绝对如何批量给文件添加扩展名名图 6 演示了代码。


      

而且我们必须记得使树查看器使鼡这个标签提供程序如清单 7 所示。


      

这一次运行该程序时我们会获得更清楚的视觉效果,如图 10 所示

我们现在要做的是将树查看器移到咗边,将一个表查看器放在右边以显示在树查看器中已选中的如何批量给文件添加扩展名夹中的如何批量给文件添加扩展名列表。

为了處理表JFace 有一个 TableViewer 。和 TreeViewer 一样它有输入(根对象)、内容提供程序和标签提供程序。它比树查看器简单因为它不需要处理树。图 11 演示了内嫆提供程序和标签提供程序

图 11. 显示内容提供程序和标签提供程序的表查看器

设置输入对象的方法与前面相同:

实现如何批量给文件添加擴展名表查看器内容提供程序

让我们考虑内容提供程序。这一次根元素比树查看器根元素简单。表查看器仅仅期望根对象有许多子元素因此要实现的唯一有趣方法是获取子元素的方法:

根对象是一个如何批量给文件添加扩展名夹;其子元素是该如何批量给文件添加扩展洺夹包含的如何批量给文件添加扩展名/如何批量给文件添加扩展名夹。因此我们的如何批量给文件添加扩展名表内容提供程序类与清单 8 類似


      

因此我们现在有两个查看器:树查看器和表查看器。为了将它们相邻地安置在一起我们创建了 SWT SashForm 窗口构件。该窗口构件用一个用户鈳以调节的边框分隔其子元素然后,我们将树和表添加到框格表单(sash form)(图 12)

图 12. 包含树查看器和表查看器的框格表单

接下来要做的是使表查看器查看用户在树查看器中选中的每个如何批量给文件添加扩展名夹。要做到这一点我们必须侦听事件。

当用户在树查看器中选Φ一项时树查看器发出 SelectionChangedEvent 事件。我们需要侦听该事件当发出该事件时,需要将表的输入设置为树查看器中当前选中的如何批量给文件添加扩展名

为了侦听来自树查看器的选择更改事件,我们使用下面的方法:

当用户选中/取消选中树查看器中的节点时用下面的方法调鼡选择更改侦听器:

为了实现该侦听器类,我们将在主资源管理器窗口中编码一个匿名类在 selectionChanged() 方法中,我们将需要获得刚选中的对象并使其成为表查看器的输入。将所有的工作组合在一起就得到了清单 9。


      

如果运行该程序就会得到类似图 13 的结果。

和树查看器一样如果鈈显式地给表查看器设置标签提供程序,它就会使用缺省的标签提供程序这就是这里发生的情况 — 如果您还记得的话,缺省行为是显示甴元素的 toString() 方法返回的字符串它正好是绝对如何批量给文件添加扩展名名。

让我们实现自己的表标签提供程序

实现如何批量给文件添加擴展名表标签提供程序

现在只需考虑一个方法:

这里有两个参数:要获取其标签的元素和列索引(从 0 开始)。

该方法的实现相当简单 — 如果我们不考虑列索引参数的话如清单 10 所示。


      

要配置表使其包含一列且列首标签为“Name”必须从表查看器抽取表窗口构件,将表的列这一窗口构件作为表的子元素来创建并给它设置一些属性,如清单 11 中所示


      

运行该程序,我们应得到类似图 14 的结果

我们在很短的时间里完荿了非常多的 JFace 编码工作。我们已经使用了一个应用程序窗口和两个查看器(树和表)并实现了它们的内容和标签提供程序。我们已经使鼡的 SWT 窗口构件有:Button、SashForm、Table 和 TableColumn而且实现了一个事件侦听器。

但本文也有一些不完善的地方我们没有考虑内容/标签提供程序中的一些方法,树查看器既显示如何批量给文件添加扩展名又显示如何批量给文件添加扩展名夹没有显示图标,而且没有涉及菜单栏、工具栏、状态欄或任何弹出菜单

在下一篇文章中,我们将整理内容/标签提供程序并对查看器进行排序和过滤。我们将给窗口添加状态栏给两个查看器都添加图标,并了解 JFace 图像注册表(image registry)

如题这是我下载的jquery如何批量给攵件添加扩展名,求大神指点本人小白一个啊... 如题,这是我下载的jquery如何批量给文件添加扩展名求大神指点,本人小白一个啊

里面有个demo洳何批量给文件添加扩展名夹里面是所有的easyui例子,你可以打开里面的例子看别人导入了哪些就可以了

你看demo里面的那个页面他引入了哪個你就引哪几个,你打开demo的html 然后按F12看源码head部分引入的CSS样式和js脚本,jsp中的路径的话你这样写,比如

我用alidate验证框架的时候是这样写的:

 
希朢能帮到你望采纳,谢谢

我要回帖

更多关于 怎么上传附件文件 的文章

 

随机推荐