「java下载功能实现」java手机应用下载
本篇文章给大家谈谈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手机应用下载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。