为了账号安全,请及时绑定邮箱和手机立即绑定

如何跟踪 FileOutputStream 的下载量?

如何跟踪 FileOutputStream 的下载量?

一只萌萌小番薯 2023-07-28 16:51:22
假设我有以下代码将从我的网站下载一些内容。URL website = new URL(url);ReadableByteChannel rbc = Channels.newChannel(website.openStream());FileOutputStream fos = new FileOutputStream("something.zip");fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);fos.close();我想制作一个 JProgressBar 来显示正在下载的文件的进度。为了实现这一目标,我知道一种方法是获取文件的总大小和文件当前下载的字节数,然后获取百分比。下面是获取文件大小的代码:HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("HEAD");long fileSize = conn.getContentLengthLong();但是,获取 FileOutputStream 的下载字节很困难,因为您必须创建循环来跟踪当前正在下载的字节。那么你怎样才能实现这一目标呢?注意:该算法应该适用于非常大的文件,因为我从互联网下载的文件大小为 1 GB。
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

我在下面提供了代码片段,您可以查看它。基本上,您必须计算字节数,然后通过深入到 100 得出某个百分比来进行计算。


InputStream inputStream = util.getInputStream();

            // opens an output stream to save into file

            FileOutputStream outputStream = new FileOutputStream(saveFilePath);


            byte[] buffer = new byte[BUFFER_SIZE];

            int bytesRead = -1;

            long totalBytesRead = 0;

            int percentCompleted = 0;

            long fileSize = util.getContentLength();


            while ((bytesRead = inputStream.read(buffer)) != -1) {

                outputStream.write(buffer, 0, bytesRead);

                totalBytesRead += bytesRead;

                percentCompleted = (int) (totalBytesRead * 100 / fileSize);


                setProgress(percentCompleted);  

查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信