主要代码
1.下载文件的大小.
2.当前已经下载的大小(就能得到下载百分比)
3.得到下载的速度..
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
public class test implements Runnable {
private static final boolean DEBUG = false;
static int sudu = 0;
static boolean fo = true;
public void m() {
String url = "http://www.feifeishijie.com/d/file/p/0037aec039e87cbb95767c7224bc5e8f.rar"; // 下载文件地址
String file = "c:/1.rar"; // 保存地址
try {
saveToFile(url, file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
test t = new test();
Thread tt = new Thread(t);
tt.start();
t.m();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void saveToFile(String destUrl, String fileName)
throws IOException {
boolean DEBUG = true;// 是否输出调试信息
int BUFFER_SIZE = 10240;// 缓冲区大小
long zong = 0;
DecimalFormat twoDigits = new DecimalFormat("0.00");
FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpUrl = null;
URL url = null;
byte[] buf = new byte[BUFFER_SIZE];
int size = 0;
// 建立链接
url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
// 连接指定的资源
long count = Long.parseLong(httpUrl.getHeaderField("Content-Length")); // 获取要下载文件的总大小(字节)
httpUrl.connect();
// 获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
// 建立文件
File file = new File(fileName);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
fos = new FileOutputStream(fileName);
if (DEBUG)
System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件["
+ fileName + "]");
// 保存文件
while ((size = bis.read(buf)) != -1) {
fos.write(buf, 0, size);
zong += size; // size是循环一次下载的字节数.所以.我们每次相加.得到zong 就知道当前下载了多少字节了
// .方便等下算文件下载的百分比
sudu += size; // 因为我们下面的线程会3秒钟自动读取一次sudu的值.
// 这样我们好知道1秒下载了多少.好算出来下载的速度..
// ---------------------看不到下载的速度.因为此线程输出速度太快.屏蔽下面的输出.---------------------
System.out.println("size=" + size + "-----zong=" + zong);
System.out.println("进度"
+ (twoDigits.format((double) (zong * 100) / count)));
}
fo = false;
fos.close();
bis.close();
httpUrl.disconnect();
}
public void run() {
while (fo) {
System.out.println("sudu=" + sudu + " 下载速度" + ((sudu / 1024) / 3)); // 我设置3秒算一次.这样会准确点.等到的是KB
sudu = 0;
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
1.下载文件的大小.
2.当前已经下载的大小(就能得到下载百分比)
3.得到下载的速度..
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
public class test implements Runnable {
private static final boolean DEBUG = false;
static int sudu = 0;
static boolean fo = true;
public void m() {
String url = "http://www.feifeishijie.com/d/file/p/0037aec039e87cbb95767c7224bc5e8f.rar"; // 下载文件地址
String file = "c:/1.rar"; // 保存地址
try {
saveToFile(url, file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
test t = new test();
Thread tt = new Thread(t);
tt.start();
t.m();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void saveToFile(String destUrl, String fileName)
throws IOException {
boolean DEBUG = true;// 是否输出调试信息
int BUFFER_SIZE = 10240;// 缓冲区大小
long zong = 0;
DecimalFormat twoDigits = new DecimalFormat("0.00");
FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpUrl = null;
URL url = null;
byte[] buf = new byte[BUFFER_SIZE];
int size = 0;
// 建立链接
url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
// 连接指定的资源
long count = Long.parseLong(httpUrl.getHeaderField("Content-Length")); // 获取要下载文件的总大小(字节)
httpUrl.connect();
// 获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
// 建立文件
File file = new File(fileName);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
fos = new FileOutputStream(fileName);
if (DEBUG)
System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件["
+ fileName + "]");
// 保存文件
while ((size = bis.read(buf)) != -1) {
fos.write(buf, 0, size);
zong += size; // size是循环一次下载的字节数.所以.我们每次相加.得到zong 就知道当前下载了多少字节了
// .方便等下算文件下载的百分比
sudu += size; // 因为我们下面的线程会3秒钟自动读取一次sudu的值.
// 这样我们好知道1秒下载了多少.好算出来下载的速度..
// ---------------------看不到下载的速度.因为此线程输出速度太快.屏蔽下面的输出.---------------------
System.out.println("size=" + size + "-----zong=" + zong);
System.out.println("进度"
+ (twoDigits.format((double) (zong * 100) / count)));
}
fo = false;
fos.close();
bis.close();
httpUrl.disconnect();
}
public void run() {
while (fo) {
System.out.println("sudu=" + sudu + " 下载速度" + ((sudu / 1024) / 3)); // 我设置3秒算一次.这样会准确点.等到的是KB
sudu = 0;
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}