利用JTree组件构建一个目录导航树是一件很容易的事情,不过需要注意的是,当HDFS文件系统中目录数量和层级较多时,该如何加载显示它们。通常有两种方式,一是一次性加载显示所有目录,这可能比较耗时,当然如果另外启动一个线程的话,在页面上也不会出现明显的阻塞。二是逐级加载显示目录,当用户点击某个目录时,系统才开始加载其下的子目录信息。
另外一个需要注意的细节,就是JTree目录树的刷新问题,当新建、重命名或者删除目录时,需要刷新JTree目录树,理想的方法是只刷新相关的JTree分支,而不是每次都刷新整棵目录树。
HDFS文件系统的根目录路径是“/”,不过笔者本人在设计这个资源管理器时,并没有固定采用默认根目录路径,而是提供了可自定义的根目录路径接口,为什么要这样呢?因为我们考虑到日后要将此资源管理器组件嵌入到其他的窗口系统中,并可根据不同用户组权限分配设置不同的起始根目录,譬如,对于admin系统管理员等角色,根目录路径为”/”,对于hdfs角色用户,根目录路径则为“/user/hdfs”,依次类推,等等等等。效果图如下所示:
3.2 右侧目录文件列表
利用JTable组件构建右侧的目录文件列表,用不同的图标来区分文件和目录,列表中显示的内容包括:目录文件名称、文件大小、目录文件权限、所属用户、所属用户组、创建(修改)时间等。与Windows的资源管理器类似,系统不会显示目录大小信息,这是因为统计目录大小是一件比较耗时的工作。
在列表中双击目录行时,系统将打开进入此目录。但双击文件行时,系统将不执行任何操作。在这一点,朋友们可以根据自己的需要自行开发设计。
目录文件的权限信息格式与linux系统中的目录文件权限信息格式类似,HDFS Java API提供有接口方法获取和设置权限信息,笔者本人编写了一个方法,专门用来解析获取目录文件的权限信息,代码如下: