`

rcp 本机磁盘文件浏览

阅读更多
package com.xxx.dev;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class FileViewer extends ViewPart {

    private TreeViewer tv;
    public static final String ID = "com.xxx.dev.FileViewer"; //$NON-NLS-1$

    /**
     * Create contents of the view part
     * 
     * @param parent
     */
    @Override
    public void createPartControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new FillLayout());

        tv = new TreeViewer(container, SWT.BORDER);
        tv.setContentProvider(new FileTreeContentProvider());
        // 添加标签管理器
        tv.setLabelProvider(new FileTreeLabelProvider());
        // 设置treeviewer的输入
        tv.setInput("root");
        //
        createActions();
        initializeToolBar();
        initializeMenu();
    }

    /**
     * Create the actions
     */
    private void createActions() {
        // Create the actions
    }

    /**
     * Initialize the toolbar
     */
    private void initializeToolBar() {
        IToolBarManager toolbarManager = getViewSite().getActionBars()
                .getToolBarManager();
    }

    /**
     * Initialize the menu
     */
    private void initializeMenu() {
        IMenuManager menuManager = getViewSite().getActionBars()
                .getMenuManager();
    }

    @Override
    public void setFocus() {
        // Set the focus
    }
}

class FileTreeContentProvider implements ITreeContentProvider {
    public Object[] getChildren(Object arg0) {
        // 返回树的下一级节点
        return ((File) arg0).listFiles();
    }

    public Object getParent(Object arg0) {
        // 返回树的上一级节点
        return ((File) arg0).getParentFile();
    }

    public boolean hasChildren(Object arg0) {
        Object[] bj = getChildren(arg0);
        // 判断树是否有下一级节点,true为在节点显示"+"信息
        return bj == null ? false : bj.length > 0;
    }

    public Object[] getElements(Object arg0) {
        // 打印出树的输入信息,通常用户可以通过输入信息构建树
        System.out.println(arg0);
        // File.listRoots()作为树的根节点
        return File.listRoots();
    }

    @Override
    public void dispose() {
    }

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}

class FileTreeLabelProvider implements ILabelProvider {
    private List listeners;

    private String file;

    private String dir;

    boolean preserveCase;

    public FileTreeLabelProvider() {
        listeners = new ArrayList();

        // 添加文件和目录的图标
        file = ISharedImages.IMG_OBJ_ELEMENT;
        dir = ISharedImages.IMG_OBJ_FOLDER;

    }

    public void setPreserveCase(boolean preserveCase) {
        this.preserveCase = preserveCase;

        // 触发事件,重新得到显示标签
        LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
        for (int i = 0, n = listeners.size(); i < n; i++) {
            ILabelProviderListener ilpl = (ILabelProviderListener) listeners
                    .get(i);
            ilpl.labelProviderChanged(event);
        }
    }

    public Image getImage(Object arg0) {
        // 返回目录或文件的图标
        return ((File) arg0).isDirectory() ? PlatformUI.getWorkbench().getSharedImages().getImage(dir): PlatformUI.getWorkbench().getSharedImages().getImage(file);
    }

    public String getText(Object arg0) {
        String text = ((File) arg0).getName();

        if (text.length() == 0) {
            text = ((File) arg0).getPath();
        }

        // 返回目录或文件的文件名
        return preserveCase ? text : text.toUpperCase();
    }

    public void addListener(ILabelProviderListener arg0) {
        // 添加监听器
        listeners.add(arg0);
    }

    public void dispose() {
    }

    public boolean isLabelProperty(Object arg0, String arg1) {
        return false;
    }

    public void removeListener(ILabelProviderListener arg0) {
        // 删除监听器
        listeners.remove(arg0);
    }
}

 

分享到:
评论

相关推荐

    NetBeans RCP - 使用 Node & ExplorerManager 结合 BeanTreeView 编写的一个磁盘文件树 Build20080119

    在这个特定的项目中,"NetBeans RCP - 使用 Node & ExplorerManager 结合 BeanTreeView 编写的一个磁盘文件树 Build20080119",开发者构建了一个能够展示计算机硬盘上文件和目录结构的可视化工具。 **Node**: 在...

    Linux常用命令手册

    - `gitview`: 浏览Git仓库中的文件。 - **Ln**: 创建符号链接或硬链接。 - `ln`: 创建文件的硬链接或符号链接。 - **Locate**: 快速查找文件位置。 - `locate`: 快速定位文件的位置。 - **MC (Midnight Commander...

    Linux命令大全

    - **MSHOWFAT**: 用于显示磁盘文件系统的 FAT 表。 - **MTOOLS**: 一组用于处理 MS-DOS 格式磁盘的工具。 - **MTOOLSTEST**: 用于测试 MTOOLS 工具集的功能。 - **MV**: 用于移动或重命名文件。 - **OD (Octal Dump)...

    linux命令详细讲解

    5. **Cat, More, Less, Head, Tail, Cut**:显示、浏览和截取文件内容。 6. **File**:识别文件类型。 7. **Ls, LL**:列出目录内容及详细信息。 8. **Chown, Umask**:改变文件和目录的所有者和权限。 9. **Chattr*...

    UNIX常用命令.doc

    在UNIX操作系统中,掌握常用的命令是提升工作效率的关键。...92. `rcp`:远程复制文件,实现跨系统文件传输。 93. `rlogin`:远程登录,实现远程操作。 94. `rm`, `rmdir`:删除文件或目录,注意操作不可逆。 95. `

    linux命令大全

    - **示例**: `df -h` 显示所有已挂载文件系统的磁盘空间使用情况。 **38. edquota** - **功能**: 配置用户的磁盘空间配额。 - **用法**: `edquota [选项] 用户` - **示例**: `edquota -u user1` 配置用户`user1`的...

    运维工程师必会的109个Linux命令.pdf

    22. **`ls`** - 列出目录内容,是最常用的文件浏览命令。 23. **`mkdir`** - 创建目录,是文件系统管理的基本操作。 24. **`more`** - 与 `less` 类似,用于分页查看文件内容,但功能较为简单。 25. **`mv`** - ...

    华为内部Linux培训资料

    资料介绍了FTP远程文件传输、Telnet远程登录、R-系列命令(如`rcp`、`rlogin`)的使用方法,这些都是进行远程管理和数据交换的基础。 ### 常用使用技巧 #### 软件包的安装与卸载 资料详细讲解了RPM包管理工具的...

    AIX 常用命令汇总

    - **功能**:显示/tmp文件系统的磁盘空间使用情况。 #### FTP命令详解 FTP是Internet中最常用的文件传输协议之一,适用于DOS和UNIX系统之间的文件传输。熟悉FTP的基本命令对于用户来说非常重要,下面是一些常用的...

Global site tag (gtag.js) - Google Analytics