gpt4 book ai didi

java - 如何在文件传输时创建进度条

转载 作者:行者123 更新时间:2023-12-01 07:34:51 25 4
gpt4 key购买 nike

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 但看起来我走错了路。

最佳答案

我可以想到两种方法。

Swing worker

首先将您的复制代码包装到 SwingWorker 中,使用 setProgress 方法更新进度,并使用属性更改监听器来监视进度属性的更改。

当进度属性更改时,您将更新 UI。

此解决方案将要求您提供自己的 UI

进度监视器

使用 ProgressMonitorInputStream ,它有自己的 UI。

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

(从 Java 文档窃取的示例)

关于java - 如何在文件传输时创建进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com