如何跟踪 FileOutputStream 的下载量?

假设我有以下代码将从我的网站下载一些内容。


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。


一只萌萌小番薯
浏览 105回答 1
1回答

青春有我

我在下面提供了代码片段,您可以查看它。基本上,您必须计算字节数,然后通过深入到 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);  
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java