我正在寻找一种使用方法
copyInputStreamToFile(InputStream source, File destination)
按文件大小在控制台中制作一个小进度条。有办法做到这一点吗?
最佳答案
简短的回答你不能,看看这个方法的源代码,我试图跟踪它的执行路径,它转到了 IOUtils
类中的这个方法:
public static long copyLarge(final InputStream input, final OutputStream output, final byte[] buffer)
throws IOException {
long count = 0;
int n = 0;
while (EOF != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
所以,这个功能是 encapsulated通过 API。
长答案你可以自己实现下载方法,通过使用IOUtils和FileUtils库的相关部分,并添加在控制台中打印下载文件百分比的功能:
这是一个有效的启动示例:
package apache.utils.custom;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
public class Downloader {
private static final int EOF = -1;
private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
public static void copyInputStreamToFileNew(final InputStream source, final File destination, int fileSize) throws IOException {
try {
final FileOutputStream output = FileUtils.openOutputStream(destination);
try {
final byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
long count = 0;
int n = 0;
while (EOF != (n = source.read(buffer))) {
output.write(buffer, 0, n);
count += n;
System.out.println("Completed " + count * 100/fileSize + "%");
}
output.close(); // don't swallow close Exception if copy completes normally
} finally {
IOUtils.closeQuietly(output);
}
} finally {
IOUtils.closeQuietly(source);
}
}
您应该向此方法提供预期的文件大小,您可以使用以下代码计算该大小:
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
int file_size = urlConnection.getContentLength();
当然,更好的想法是将整个功能封装在一个方法中。
希望对您有帮助。
关于使用 copyInputStreamToFile 在控制台上下载 Java ApacheIO 文件进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864788/