【问题标题】:Copy an existing folder into newly created project in Eclipse workspace将现有文件夹复制到 Eclipse 工作区中新创建的项目中
【发布时间】:2016-12-16 11:30:45
【问题描述】:

我正在开发一个 Eclipse 插件,我试图通过向导从用户那里获取输入。
在向导中按下完成按钮后,我正在使用IWorkspaceIProject 等接口在工作区中创建一个项目。

我想将现有文件夹(可能进一步包含子文件夹和文件)复制到新创建的项目中,并在工作区中显示。该文件夹不是 Eclipse 项目。

有什么办法吗?

【问题讨论】:

    标签: java eclipse eclipse-plugin


    【解决方案1】:

    quick-and-dirty 解决方案会将现有文件夹(及其所有内容)复制到项目位置下方的所需位置,然后刷新项目。

    例如:

    IProject project = ...
    IPath location = project.getLocation();
    Files.copy( pathToExistingFolder, location.toFile().toPath() );
    project.refreshLocal( IResource.DEPTH_INFINITE, null );
    

    适当的解决方案将遍历现有文件夹并创建其中找到的每个文件和文件夹的副本。

    要创建一个新文件,请使用

    IProject project = ...
    IFile file = project.getFile( "path/relative/to/prooject" );
    file.create( inputStream, IResource.NONE, null );
    // or, to override and existing file (file.eists() == true):
    file.setContents( inputStream, IResource.NONE, null );
    

    inputStream 假定由现有文件夹中当前遍历的文件支持。

    要创建一个新文件夹,请使用

    IProject project = ...
    IFolder folder = project.getFolder( "path/relative/to/prooject" );
    folder.create( IResource.NONE, true, null );
    

    我进一步假设您现有的文件最终将存储在(jared)插件中。在这种情况下,后一种方法是唯一可行的,因为它允许您从插件存储中提供文件夹结构和文件内容。

    Plugin Development Environment (PDE)manage and execute templates during project-creation 提供扩展点和 API。虽然您当然不想依赖 PDE 中的插件,但您可能需要查看源代码:https://github.com/eclipse/eclipse.pde.ui/tree/master/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/templates

    【讨论】:

    • 嗨。谢谢回答。实施快速而肮脏的方式有什么问题吗?此外, Files.copy( pathToExistingFolder, location.toFile().toPath() );给出错误“文件类型中的方法复制(路径,输出流)不适用于参数(路径,路径)”
    • @tejas 确保您使用的是正确的Path - 这必须是java.nio.file.Path 而不是org.eclipse.core.runtime.Path
    • @tejas 访问由工作区管理的文件的首选方式是通过资源 API。因此,您将避免在复制工作区“背后”的文件和刷新工作区状态之间可能出现的中间故障。
    • @RüdigerHerrmann 你确定第一个解决方案也会复制目录中的所有内容吗?因为 location.toFile.toPath() 在创建和打开项目后会给出 FileAlreadyExistsException。如果我用“/newFolder”附加位置,然后执行 location.toFile.toPath() 那么只有主目录被复制,但其中的内容没有被复制。
    • @tejas 如果没有看到您的代码,我真的无法判断。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多