HttpClient和ProgressListener - 有助于实现

时间:2011-03-16 04:51:02

标签: java file-io file-upload

我正在学习所以我需要你的建议。我找到了一个演示HttpClient进度监听器的代码示例。这很好,但我不知道如何使用我的代码实现ProgressListener接口(观察此代码......),因为ProgressListener接口是一个内部接口,但我的HttpClient代码在另一个类中:(请告诉我示例提示。这是代码:

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;

public class CountingMultipartEntity extends MultipartEntity {

private final ProgressListener listener;

public CountingMultipartEntity(final ProgressListener listener) {
    super();
    this.listener = listener;
}

public CountingMultipartEntity(final HttpMultipartMode mode, final ProgressListener listener) {
    super(mode);
    this.listener = listener;
}

public CountingMultipartEntity(HttpMultipartMode mode, final String boundary,
        final Charset charset, final ProgressListener listener) {
    super(mode, boundary, charset);
    this.listener = listener;
}

@Override
public void writeTo(final OutputStream outstream) throws IOException {
    super.writeTo(new CountingOutputStream(outstream, this.listener));
}

public static interface ProgressListener {
    void transferred(long num);
}

public static class CountingOutputStream extends FilterOutputStream {

    private final ProgressListener listener;
    private long transferred;

    public CountingOutputStream(final OutputStream out,
            final ProgressListener listener) {
        super(out);
        this.listener = listener;
        this.transferred = 0;
    }


    public void write(byte[] b, int off, int len) throws IOException {
        out.write(b, off, len);
        this.transferred += len;
        this.listener.transferred(this.transferred);
    }

    public void write(int b) throws IOException {
        out.write(b);
        this.transferred++;
        this.listener.transferred(this.transferred);
    }
}

}

非常感谢任何有用的信息。

安德鲁

1 个答案:

答案 0 :(得分:2)

你可以简单地说

class MyProgressListener implements CountingMultipartEntity.ProgressListener {
    public void transferred(long num) {
        System.out.println(num + " bytes transferred so far..."); //Display Progress
    }
}

然后

new CountingMultipartEntity(new MyProgressListener());

(已编辑以提供更多详细信息并修复愚蠢的错误)