[英]Get file name of download file and segment downloading
这是我的代码,用于使用线程从指定的URL下载文件。 我想将其下载到多线程,但无法解决。 我想下载的文件名与URL + part.1,2,3 ..等上的文件名相同。你们可以帮我吗? 对不起,我的英语语法不好! 我最喜欢的测试链接是: https: //docs.oracle.com/javaee/7/JEETT.pdf提前致谢!
public class Threadtest extends Thread {
String s ;
public void InputUrl(){
Scanner sc = new Scanner(System.in);
System.out.println("Input URL :");
s = sc.nextLine();
}
public void run(){
BufferedInputStream bis = null ;
RandomAccessFile raf = null ;
HttpURLConnection conn = null;
URL mUrl = null ;
String a = new File(mUrl.getPath().toString()).getName();
try{
mUrl = new URL(s);
conn = (HttpURLConnection)mUrl.openConnection();
String byteRange = 0+ "-" + 1024;
conn.setRequestProperty("Range", "bytes=" + byteRange);
conn.connect();
bis = new BufferedInputStream(conn.getInputStream());
raf = new RandomAccessFile(a, "rw");
raf.seek(0);
byte[] buffer = new byte[4092];
int count = 0 ;
while ((count = bis.read(buffer,0,4092))!= -1)
{
raf.write(buffer, 0 ,count);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
扩展Thread
不是一个好主意。 从哲学的角度来看,更好的方法是实现Runnable
接口。
class DownloadTask implements Runnable {
private final URL url;
DownloadTask(URL url) {
this.url = url;
}
@Override
public void run() {
// download code
}
}
现在我们只有代码可供下载。 下一步是使用Executor Framework执行我们的下载任务。
class Downloader{
private static boolean exitFlag;
public static void main(String[] args) {
ExecutorService pool = Executors.newCachedThreadPool();
while(exitFlag) {
URL fileUrl = readUrlFromUserOrSetExit();
pool.execute(new DownloadTask(fileUrl));
}
pool.shutdown();
}
private static URL readUrlFromUserOrSetExit() {
// read from user of set exit flag
}
}
如何运作?
pool
执行程序,该执行程序负责所有“线程魔术”。 DownloadTask
实例 pool
execute
。 shutdown
执行程序。 如果您不想使用外部库,这可能是最简单的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.