Java 将现有文件夹复制到Eclipse工作区中新创建的项目中

Java 将现有文件夹复制到Eclipse工作区中新创建的项目中,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在开发一个Eclipse插件,试图通过向导从用户那里获取输入。 按下向导中的“完成”按钮后,我将使用IWorkspace、IProject等界面在工作区中创建一个项目 我想将现有文件夹(可能还包含子文件夹和文件)复制到新创建的项目中,并在工作区中显示该文件夹。该文件夹不是Eclipse项目 有什么方法可以做到这一点吗?快速脏的解决方案会将现有文件夹(及其所有内容)复制到项目位置下方的所需位置,然后刷新项目 例如: IProject project = ... IPath location =

我正在开发一个Eclipse插件,试图通过向导从用户那里获取输入。
按下向导中的“完成”按钮后,我将使用
IWorkspace
IProject
等界面在工作区中创建一个项目

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


有什么方法可以做到这一点吗?

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

例如:

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)插件中。在这种情况下,后一种方法是唯一可行的,因为它允许您从插件存储提供文件夹结构和文件内容


向提供扩展点和API。虽然您当然不想依赖PDE中的插件,但您可能需要查看源代码:

Hi。谢谢你的回答。实施快速肮脏的方式有什么问题吗?还有,Files.copy(pathToExistingFolder,location.toFile().toPath());给出一个错误,“类型文件中的方法副本(路径,输出流)不适用于参数(路径,路径)”@tejas确保您使用的是正确的
路径
——这必须是
java.nio.file.Path
而不是
org.eclipse.core.runtime.Path
@tejas访问工作区管理的文件的首选方法是通过resources API。因此,您可以避免复制工作区“后台”文件和刷新工作区状态之间可能出现的中间故障。@Rüdigerhermann您确定第一个解决方案也会复制目录中的所有内容吗?因为location.toFile.toPath()在创建和打开项目后提供FileAlreadyExistsException。如果我用“/newFolder”附加location,然后执行location.toFile.toPath(),则只有主目录被复制,但其中的内容不会被复制。@tejas如果不看代码,我真的说不出来。