`

断点续传核心代码

阅读更多
/**
	 * 断点续传
	 * 
	 * @param url
	 */
	private void duanDianXuChuan(final String url) {
		try {
			Runnable r = new Runnable() {
				@Override
				public void run() {
					getRemoteFile(url);
				}
			};
			new Thread(r).start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 下载远端文件
	 * 
	 * @param urlString
	 */
	private void getRemoteFile(String urlString){
		try{
			File file;
			if(mCurSize == 0){
				file = File.createTempFile(fileNa, fileEx);
				currentTempFilePath = file.getAbsolutePath();
				Log.e(“andy”,file.getName() + ” has exists.”);
			} else {
				file = new File(currentTempFilePath);
				FileInputStream fis = new FileInputStream(file);
				mCurSize = fis.available();
				Log.e(“andy”,file.getName() + ” has ” + mCurSize + ” bytes.”);
			}
			URL url = new URL(urlString);
			HttpURLConnection httpConnection = (HttpURLConnection) url
			.openConnection();
			httpConnection.setRequestProperty(“User-Agent”, “NetFox”);
			String sProperty = “bytes=” + mCurSize + “-”;
			httpConnection.setRequestProperty(“RANGE”, sProperty);
			InputStream is = httpConnection.getInputStream();
			Log.e(“andy”,”mTempFileName = ” + mTempFileName);
			/* 将文件写入暂存盘 */
			FileOutputStream fos = new FileOutputStream(file, true);
			byte buf[] = new byte[512];
			do
			{
				int numread = is.read(buf);
				if (numread <= 0)
				{
					mHandler.sendEmptyMessageDelayed(this.DOWNLOAD_FINISH, 0);
					break;
				}
				mCurSize += numread;
				mHandler.sendEmptyMessageDelayed(this.UPDATE_DOWNLOAD_PROGRESS, 0);
				Log.e(“andy”,”current size = ” + mCurSize);
				fos.write(buf, 0, numread);
			}while (mContinue);
			/* 打开文件进行安装 */
			if(mCurSize == mSize) {
				mCurSize = 0;
				openFile(file);
			}
		try
		{
			is.close();
		}
		catch (Exception ex)
		{
			Log.e(“andy”, “error: ” + ex.getMessage(), ex);
		}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	/**
	 * 获得文件长度
	 * 
	 * @param urlString
	 * @return
	 */
	public long getFileSize(String urlString) {
		int nFileLength = -1;
		try {
		URL url = new URL(urlString);
		HttpURLConnection httpConnection = (HttpURLConnection) url
		.openConnection();
		httpConnection.setRequestProperty(“User-Agent”, “NetFox”);
		int responseCode = httpConnection.getResponseCode();
		if (responseCode >= 400) {
			return -2; // -2 represent access is error
		}
		String sHeader;
		for (int i = 1;; i++) {
			sHeader = httpConnection.getHeaderFieldKey(i);
			if (sHeader != null) {
				if (sHeader.equals(“content-length”)) {
					nFileLength = Integer.parseInt(httpConnection
					.getHeaderField(sHeader));
					break;
				}
			} else
				break;
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return nFileLength;
	}

	/**
	 * 计算百分比
	 * 
	 * @param p1
	 * @param p2
	 * @return
	 */
	public static String percent(double p1, double p2) {
		String str;
		double p3 = p1 / p2;
		NumberFormat nf = NumberFormat.getPercentInstance();
		nf.setMinimumFractionDigits(2);
		str = nf.format(p3);
		Log.e(“andy”,”percentage = ” + str);
		return str;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics