「java下载功能实现」java手机应用下载

博主:adminadmin 2023-01-02 20:03:04 837

本篇文章给大家谈谈java下载功能实现,以及java手机应用下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java怎样实现数据下载功能呢

这是我以前弄的一个下载的模块,里面的pl指的是System.out.println(),

详情可以看 ;tid=156

package com.jc.download;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.net.HttpURLConnection;

import java.net.URL;

import static com.jc.tool.io.Out.pl;

public class DownloadThread extends Thread {

private String url = null;

private String file = null;

private long offset = 0;

private long length = 0;

private int no = 0;

public DownloadThread(String url, String file, long offset, long length) {

pl("正在初始化下载线程...");

this.url = url;

this.file = file;

this.offset = offset;

this.length = length;

}

public void setNo(int no) {

this.no = no;

}

@Override

public void run() {

try {

pl("线程【"+no+"】开始连接主机...");

HttpURLConnection conn = (HttpURLConnection) new URL(url)

.openConnection();

pl("线程【"+no+"】发送下载请求...");

conn.setRequestMethod("GET");

conn.setRequestProperty("RANGE", "bytes=" + this.offset + "-"

+ (this.offset + this.length - 1));

pl("线程【"+no+"】创建文件流...");

BufferedInputStream bis = new BufferedInputStream(

conn.getInputStream());

byte[] buf = new byte[1024];

int bytesRead;

pl("线程【"+no+"】开始向文件写入数据...");

while ((bytesRead = bis.read(buf, 0, buf.length)) != -1) {

this.writeFile(file, offset, buf, bytesRead);

this.offset += bytesRead;

}

pl("线程【"+no+"】写入完成");

} catch (IOException e) {

e.printStackTrace();

}

pl("线程【"+no+"】退出");

}

public void writeFile(String fileName, long offset, byte[] bytes,

int realLength) throws IOException {

File file = new File(fileName);

RandomAccessFile raf = new RandomAccessFile(file, "rw");

raf.seek(offset);

raf.write(bytes, 0, realLength);

raf.close();

}

}

java 下载功能

import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.ProtocolException;import java.net.URI;import java.net.URL;import java.util.Random;/** * * 实现了下载的功能*/ public class SimpleTh { public static void main(String[] args){ // TODO Auto-generated method stub //String path = "倩女幽魂.mp3";//MP3下载的地址 String path =""; try { new SimpleTh().download(path, 3); //对象调用下载的方法 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static String getFilename(String path){//获得文件的名字 return path.substring(path.lastIndexOf('/')+1); } public void download(String path,int threadsize) throws Exception//下载的方法 {//参数 下载地址,线程数量 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection();//获取HttpURLConnection对象 conn.setRequestMethod("GET");//设置请求格式,这里是GET格式 conn.setReadTimeout(5*1000);// int filelength = conn.getContentLength();//获取要下载文件的长度 String filename = getFilename(path); File saveFile = new File(filename); RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd"); accessFile.setLength(filelength); accessFile.close(); int block = filelength%threadsize ==0?filelength/threadsize:filelength/threadsize+1; for(int threadid = 0;threadid=threadsize;threadid++){ new DownloadThread(url,saveFile,block,threadid).start(); } } private final class DownloadThread extends Thread{ private URL url; private File saveFile; private int block;//每条线程下载的长度 private int threadid;//线程id public DownloadThread(URL url,File saveFile,int block,int threadid){ this.url = url; this.saveFile= saveFile; this.block = block; this.threadid = threadid; } @Override public void run() { //计算开始位置的公式:线程id*每条线程下载的数据长度=? //计算结束位置的公式:(线程id+1)*每条线程下载数据长度-1=? int startposition = threadid*block; int endposition = (threadid+1)*block-1; try { try { RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd"); accessFile.seek(startposition);//设置从什么位置写入数据 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(5*1000); conn.setRequestProperty("Range","bytes= "+startposition+"-"+endposition); InputStream inStream = conn.getInputStream(); byte[]buffer = new byte[1024]; int len = 0; while((len = inStream.read(buffer))!=-1){ accessFile.write(buffer, 0, len); } inStream.close(); accessFile.close(); System.out.println("线程id:"+threadid+"下载完成"); } catch (FileNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }}

参考一下这个代码。

java下载功能实现

楼主得在后台的控制器中用reponse的输出流转化一下,我给你个例子。

InputStream fis = new BufferedInputStream(new FileInputStream(filePath));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();response.reset();response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"),"ISO-8859-1"));response.addHeader("Content-Length", "" + excelFile.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();toClient.close();

求采纳为满意回答。

关于java下载功能实现和java手机应用下载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。