簡體   English   中英

將文件從文件系統復制到項目並正確管理進度監視器

[英]Copy files from filesystem to a project and correctly manage the progress monitor

我正在嘗試根據我的需要修改答案,並使進度監視器正確反映進度。 到目前為止,我的方法是:

import org.eclipse.core.runtime.SubProgressMonitor;

private void configureProject(IProgressMonitor monitor)
    throws CoreException, IOException
{
    try
    {
        URL templatesURL = Activator.getDefault().getBundle().getEntry(TEMPLATES);
        File templatesFolder = new File(FileLocator.toFileURL(templatesURL).getPath());
        int fileCount = getElementsCount(templatesFolder);

        monitor.beginTask("Creating file structure for new project...", fileCount + 5);

        project.getFolder(P_SRC).delete(true, new SubProgressMonitor(monitor, 1));
        project.getFolder(P_BIN).delete(true, new SubProgressMonitor(monitor, 1));

        copyFiles(templatesFolder, project, new SubProgressMonitor(monitor, fileCount));
        project.getFile(P_TOUCH).delete(true, new SubProgressMonitor(monitor, 1));

        IClasspathEntry[] newEntries = new IClasspathEntry[3];
        newEntries[0] = JavaCore.newSourceEntry(getCreatedElement().getPath().append(SRC_MAIN));
        newEntries[1] = JavaCore.newSourceEntry(getCreatedElement().getPath().append(SRC_RES),
                                                EXCLUDE_ALL);
        newEntries[2] = JavaCore.newSourceEntry(getCreatedElement().getPath().append(SRC_TEST));
        javaProject.setRawClasspath(newEntries, new SubProgressMonitor(monitor, 2));
    }
    finally
    {
        if (!monitor.isCanceled())
            monitor.done();
    }
}


private int getElementsCount(File file)
{
    // return number of files and folders in the file
}

如您所見,我有3個用於刪除操作的刻度線和2個用於設置類路徑的刻度線。 如果我說:這是源文件夾中文件的5個計數:每個文件或文件夾1個刻度。 現在我對copyFiles方法有問題。 我修改了相關代碼以與IProgressMonitor

private void copyFiles(File srcFolder, IContainer destFolder, IProgressMonitor monitor)
    throws CoreException, IOException
{
    for (File f : srcFolder.listFiles())
    {
        if (f.isDirectory())
        {
            IFolder newFolder = destFolder.getFolder(new Path(f.getName()));
            newFolder.create(true, true, new SubProgressMonitor(monitor, 1));
            copyFiles(f, newFolder, monitor);
        }
        else
        {
            newFile.create(new FileInputStream(f), true, new SubProgressMonitor(monitor, 1));
        }
    }
}

一旦方法之一create(...)被調用(無論是上IFile或上IFolder )進度條應該由1點移動。 但是它根本沒有動。 可能是什么原因以及如何解決該問題?

upd :我修改了方法configureProject ,如下所示:

SubProgressMonitor copyFilesMonitor = new SubProgressMonitor(monitor, fileCount);
copyFilesMonitor.beginTask("Copying files...", fileCount);
copyFiles(templatesFolder, project, copyFilesMonitor);
copyFilesMonitor.done();

現在的問題是,調用后create()無論是上IFolder或上IFile )的進度設置為2/3 - 2蜱。 為整個configureProject()方法指定了2/3,最后2個滴答聲由setRawClasspath(...)

之前:

在此處輸入圖片說明

后:

在此處輸入圖片說明

您需要在為copyFiles方法創建的new SubProgressMonitor(monitor, fileCount)上調用beginTask (並done )。

如果不調用beginTask則將忽略已worked調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM