java文件上传带进度条_使用Java进行文件上传(带进度条)

要使用HttpClient检查进度,请将MultipartRequestEntity包围在计算要发送的字节的周围。包装如下:

import java.io.FilterOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import org.apache.commons.httpclient.methods.RequestEntity;

public class CountingMultipartRequestEntity implements RequestEntity {

private final RequestEntity delegate;

private final ProgressListener listener;

public CountingMultipartRequestEntity(final RequestEntity entity,

final ProgressListener listener) {

super();

this.delegate = entity;

this.listener = listener;

}

public long getContentLength() {

return this.delegate.getContentLength();

}

public String getContentType() {

return this.delegate.getContentType();

}

public boolean isRepeatable() {

return this.delegate.isRepeatable();

}

public void writeRequest(final OutputStream out) throws IOException {

this.delegate.writeRequest(new CountingOutputStream(out, 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);

}

}

}

然后实现一个ProgressListener,它更新一个进度条。记住进度条更新不能在事件分派线程上运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java Swing组件库中的JProgressBar来实现上传文件的进度条。具体实现步骤如下: 1. 创建一个JProgressBar对象,并将其添加到Swing窗口中。 2. 在上传文件时,通过监听上传的进度来更新JProgressBar的值。 3. 当上传完成后,将JProgressBar的值设置为100%。 下面是一个简单的实现示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; public class UploadFile extends JFrame implements ActionListener { private JProgressBar progressBar; public UploadFile() { super("上传文件"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); // 创建进度条并添加到窗口中 progressBar = new JProgressBar(0, 100); progressBar.setStringPainted(true); getContentPane().add(progressBar, BorderLayout.CENTER); // 添加上传文件按钮 JButton uploadButton = new JButton("上传文件"); uploadButton.setActionCommand("upload"); uploadButton.addActionListener(this); getContentPane().add(uploadButton, BorderLayout.SOUTH); pack(); setLocationRelativeTo(null); } public void actionPerformed(ActionEvent e) { if ("upload".equals(e.getActionCommand())) { // 弹出文件选择对话框选择要上传的文件 JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); uploadFile(file); } } } private void uploadFile(File file) { try { // 模拟上传文件的过程 FileInputStream fis = new FileInputStream(file); long fileSize = file.length(); byte[] buffer = new byte[1024]; int bytesRead = 0; long totalBytesRead = 0; while ((bytesRead = fis.read(buffer)) != -1) { // 更新进度条的值 totalBytesRead += bytesRead; int progress = (int) (totalBytesRead * 100 / fileSize); progressBar.setValue(progress); } fis.close(); // 上传完成,将进度条的值设置为100% progressBar.setValue(100); JOptionPane.showMessageDialog(this, "上传完成!"); } catch (IOException e) { JOptionPane.showMessageDialog(this, "上传失败:" + e.getMessage()); } } public static void main(String[] args) { UploadFile uploadFile = new UploadFile(); uploadFile.setVisible(true); } } ``` 在这个示例中,我们使用了JProgressBar来显示上传文件的进度,并通过模拟上传文件的过程来更新进度条的值。当上传完成后,我们将进度条的值设置为100%并弹出一个消息框来通知用户上传完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值