我正在使用apache commons-net从FTP服务器下载文件。那很多都很好。我遇到问题的部分是使用JProgressBar
显示下载进度。
以下代码演示了我如何下载我需要的文件:
public void download() {
try {
FTPClient ftpClient = new FTPClient();
String fileName = "OFMEX_MANUFACTURING.jar";
ftpClient.connect("192.168.1.242");
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
JOptionPane.showMessageDialog(null, "Server Down");
}
boolean login = ftpClient.login("bioftp", "bioftp");
boolean changeWorkingDirectory = ftpClient.changeWorkingDirectory("ofmex\\Linux\\");
boolean setFileType = ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
OutputStream data = (OutputStream) new FileOutputStream(fileName);
ftpClient.retrieveFile(fileName, data);
ftpClient.abort();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
您应该可以使用CopyStreamListener。请注意,未使用 bytesTransferred(CopyStreamEvent事件)方法,但 bytesTransferred(long totalBytesTransferred,int bytesTransferred,long streamSize)应为。
答案 1 :(得分:2)
如果您要直接呼叫retriveFile()
,那么您可能无法知道传输了多少字节。相反,您可以逐字节检索文件并保持传输的每个字节的计数。您还可以获取要传输的总字节数,以便计算要在进度条中显示的百分比。
InputStream stSource = new FileInputStream(locFile);
OutputStream stDest = new BufferedOutputStream(ftp.storeFileStream(remFile), ftp.getBufferSize());
Util.copyStream(stSource, stDest, ftp.getBufferSize(),CopyStreamEvent.UNKNOWN_STREAM_SIZE, new CopyStreamAdapter() {
public void bytesTransferred(long totalBytesTransferred,int bytesTransferred, long streamSize) {
long megsTotal = 0;
long megs = totalBytesTransferred / 1048576;
for (long l = megsTotal; l < megs; l++) {
System.err.print("|");
}
megsTotal = megs;
}
});
参见上面代码中使用的this apache commons util。
答案 2 :(得分:0)
在NetBeans中创建桌面应用程序。它为您提供了预先构建的进度条,其中包含任务监视器和忙碌图标以及您需要的所有内容。使用CopyStreamListener并使用bytesTransferred方法来管理进度条。