import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class GetURL {
private int mTotalLength;
private int mCurrentLength;
URL mURL;
URLConnection mURLConnection;
public GetURL(String strURL) {
try {
mURL = new URL(strURL);
mURLConnection = mURL.openConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
public int getTotalLen() { return mTotalLength; }
public int getCurrentLen() { return mCurrentLength;}
private void initURLConnection() {
mTotalLength = mURLConnection.getContentLength();
mCurrentLength = 0;
}
private void addCurrentLen(int len) {
mCurrentLength += len;
}
public InputStream getInputStream() {
InputStream in;
try {
in = mURLConnection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return in;
}
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("argument count error");
return;
}
GetURL url = new GetURL(args[0]);
Runnable downloadThread = new Download(url);
byte[] buffer = new byte[4096];
url.initURLConnection();
new Thread(downloadThread).start();
try {
while (true) {
InputStream in = url.getInputStream();
int count = in.read(buffer);
if (count < 0)
break;
url.addCurrentLen(count);
String strDebug = new String(buffer, 0, count);
System.out.print(strDebug);
String status = ((Download)downloadThread).getStatus();
if (status.equals("OK")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Download implements Runnable {
GetURL url;
String status;
public Download(GetURL url) {
this.url = url;
status = "RUNNING";
}
public void run() {
int total = url.getTotalLen();
try {
while (true) {
int current = url.getCurrentLen();
System.out.print("\r" + current + "/" + total);
Thread.sleep(500);
if (current >= total) {
status = "OK";
break;
}
} // ~while
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public String getStatus() {
return status;
}
}