Eclispe右键sftp插件(plug-in)开发,获取右键选中的文件路径

  • A+
所属分类:java

在上一篇文章里,创建一个eclipse 右键菜单插件项目。先来看看目录结构,com.feiji.sftp.popup.actions 下面的这个SFTPAction.java 里面的run 方法,就是整个插件的入口,也就是说,用户点击右键菜单里的此插件菜单后。就是触发这个run方法执行!

 

Eclispe右键sftp插件(plug-in)开发,获取右键选中的文件路径

 

下面是插件的源码。最难的是获取右键选中的那个文件信息。我几乎找了一下午,就没找到靠谱的。包括看eclispe浩如烟海的文档也没找到。下面稍微讲解一下。

/**
     * @see IActionDelegate#run(IAction)
     */
    public void run(IAction action)
    {
        ISelection sel = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
        
        if (null == sel)
        {
            return;
        }
        
        if (!(sel instanceof IStructuredSelection))
        {
            return;
        }
        
        IStructuredSelection selection = (IStructuredSelection)sel;
        
        Object obj = selection.getFirstElement();
        
        if (null == obj)
        {
            return;
        }
        
        //在eclipse内选中的文件
        IFile file = (IFile)Platform.getAdapterManager().getAdapter(obj, IFile.class);
        
        if (null == file)
        {
            return;
        }
        
        //本地文件系统路径,如:
        String localFile = file.getLocation().toString();
        
        //eclispe内相对路径,如:
        String relativePath = file.getFullPath().toString();
        
        String fileName = relativePath.substring(relativePath.lastIndexOf('/') + 1, relativePath.length());
        
        //本地工程名可能和部署的名称不一致,需要去掉工程名这级目录
        relativePath = relativePath.substring(relativePath.indexOf('/', 1), relativePath.lastIndexOf('/'));
        
        upload(remoteFile_prefix + relativePath, fileName, localFile);
    }
    
    private void upload(String remotePath, String remoteFileName, String localFile)
    {
        SFTPClient sftpClient = null;
        InputStream is = null;
        try
        {
            sftpClient = new SFTPClient(username, password, host, 22);
            sftpClient.login();
            is = new FileInputStream(new File(localFile));
            sftpClient.upload(remotePath, remoteFileName, is);
        }
        catch (Exception e)
        {
            //静默处理了
        }
        finally
        {
            //关闭资源
            if (null != sftpClient)
            {
                try
                {
                    sftpClient.logout();
                }
                catch (Exception e2)
                {
                }
            }
            
            //本地文件流
            if (null != is)
            {
                try
                {
                    is.close();
                }
                catch (Exception e2)
                {
                }
            }
        }
    }

run方法前面也说了,是用户触发的入口。要上传文件,首先得获取文件的信息。代码大家也看到了有2/3是获取用户选中的文件的。获取到文件以后,就是sftp上传到服务器了。我这里使用的是jsch-0.1.55.jar 这个jar包。SFTPClient 是个基于这个jar的客户端类。代码我就不贴了,非本次讨论重点,直接下我的源码包看吧。需要注意的是,Eclipse插件开发,添加外部jar包跟普通java项目不太一样,需要在插件配置页面编辑plugin.xml中runtime页面的右下角classpath中添加jar包。



参考资料:

1.https://stackoverflow.com/questions/37941198/how-to-get-selected-file-name-and-its-package-path-in-eclipse-plugin?noredirect=1&lq=1

2.https://www.cnblogs.com/ceshi2016/p/7519762.html

3.Eclipse插件开发 添加外部jar包

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: