博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GetURL (java)
阅读量:7210 次
发布时间:2019-06-29

本文共 2939 字,大约阅读时间需要 9 分钟。

hot3.png

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;    }}

转载于:https://my.oschina.net/u/158589/blog/64355

你可能感兴趣的文章
革命性移动端开发框架-Flutter时间简史
查看>>
Java基本程序设计结构
查看>>
react 之 setState
查看>>
NDK开发实践
查看>>
跨域?拒绝说概念(内含demo)
查看>>
vue 源码学习(二) 实例初始化和挂载过程
查看>>
scrapy软连接失效和pip软连接失效
查看>>
IOS开发之OC-Switf 混编 -(OC 引 Swift 文件)
查看>>
JAVA并发之多线程基础(2)
查看>>
服务器返回的常见的http状态码
查看>>
HASHMAP(JDK1.7)最详细原理分析(二)
查看>>
string数组怎么定义
查看>>
我的关于前端一些知识点的理解《一》
查看>>
Asynctask源码分析
查看>>
Promise基础用法
查看>>
[译] Spring 的分布式事务实现-使用和不使用XA — 第三部分
查看>>
区块链软件公司:创新的区块链技术如何改变法律行业的面貌
查看>>
一张时序图让你看懂:脏读、不可重复读
查看>>
js创建对象的几种方法
查看>>
浮点数杂想
查看>>