3

FTPサーバーからファイルをダウンロードするためにapachecommons-netを使用しています。それだけはうまく機能しています。私が問題を抱えている部分は、を使用してダウンロードの進行状況を表示すること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();
    }
} 
4

3 に答える 3

2

CopyStreamListenerを使用できるはずです。bytesTransferred (CopyStreamEvent event)メソッドは使用されませんが、bytesTransferred(long totalBytesTransferred、int bytesTransferred、long streamSize)は使用される必要があることに注意してください。

于 2012-06-28T11:19:25.743 に答える
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;
    }
});

上記のコードで使用されているこのapachecommonsutilを参照してください。

于 2012-06-28T11:27:18.750 に答える
0

NetBeansで、デスクトップアプリケーションを作成します。それはあなたにタスクモニターと忙しいアイコンとあなたが必要とするすべてを備えた構築済みのプログレスバーを提供します。CopyStreamListenerを使用し、bytesTransferredメソッドを使用してプログレスバーを管理します。

于 2012-06-28T11:30:52.290 に答える