0
import java.awt.Component;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.swing.JOptionPane;
import javax.swing.ProgressMonitorInputStream;

public class buckUpFile {
    private Component parentComponent;

    public void copyFile() {
        File srcFolder = new File(
                "C:\\Users\\ALLEN\\Workspace\\FINAL_LCTP_WORKBENCE_1.5");
        File destFolder = new File(
                "C:\\Data Programing\\COPY_OF_FINAL_LCTP_WORKBENCE_1.5");

        if (!srcFolder.exists()) {
            JOptionPane.showMessageDialog(null, "Directory does not exist.");
            System.exit(0);
        } else {
            try {
                copyFolder(srcFolder, destFolder);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(0);
            }
        }

        JOptionPane.showMessageDialog(null,
                "Back up request has been completed");
    }

    public void copyFolder(File src, File dest) throws IOException {
        if (src.isDirectory()) {
            if (!dest.exists()) {
                dest.mkdir();
            }

            String files[] = src.list();

            for (String file : files) {
                File srcFile = new File(src, file);
                File destFile = new File(dest, file);
                copyFolder(srcFile, destFile);
            }
        } else {
            InputStream in = new BufferedInputStream(
                    new ProgressMonitorInputStream(parentComponent, "Reading "
                            + src, new FileInputStream(src)));

            OutputStream out = new FileOutputStream(dest);

            byte[] buffer = new byte[1024];

            int length;
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }

            in.close();
            out.close();
        }
    }
}

上記のコードは問題なく機能し、ファイルのデータをあるディレクトリから別のディレクトリにコピーできます。私の問題は、どうすれば進行状況バーを作成できますか? コードにアタッチして、プログラムをよりユーザーフレンドリーにすることができます。ProgressMonitorInputStream を使用してみましたが、間違ったパスにいるようです。

4

2 に答える 2

4

2つの方法が考えられます。

スイングワーカー

SwingWorkerメソッドを使用しsetProgressて進行状況を更新し、プロパティ変更リスナーを使用して進行状況プロパティへの変更を監視します。

プログレス プロパティが変更されたら、UI を更新します。

このソリューションでは、独自の UI を提供する必要があります

進捗モニター

独自の UI に付属するProgressMonitorInputStreamを使用します。

InputStream in = new BufferedInputStream(
    new ProgressMonitorInputStream(
        parentComponent,
        "Reading " + fileName,
        new FileInputStream(fileName)));

(Java Docs から盗んだ例)

于 2012-11-15T09:58:27.047 に答える
3

ここで同じ例を見つけることができます。Swing の Progress Monitoring API を使って進歩する

于 2012-11-15T09:55:03.410 に答える