单线程下载网络资源

前几天写了个下载网络资源的类,甩上来懒得解释了.

注意

这其中需要注意的便是保存到本地的文件路径:

windows注意:

例如–>C:\\[单右斜线在Java中有特殊意义,因此路径须写两个右斜线,并且必须以’\\’结尾]
示例:D:\\tmp\\

Linux注意:

根路径是从’/’开始,而且路径必须以’/’结尾.
示例:/usr/local/tmp/

java标志
image-1788

源代码

import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;

/**
* 单线程下载.
*
* @author Ruidong_pu
* @version 2013.5.4
*/

public class Download {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// http://xunlei.down.chinaz.com/201302/wordpress-3.5.1-zh_CN.tar.gz 示例地址.
System.out.println("---->请输入需要下载的URL地址('可以是:http[s],ftp,file'):");
String fileURL = sc.next();
System.out.println("---->设置下载文件存放地址:" + "\n---------------------------"
+ "\nwindows注意:"
+ "\n'例如-->C:\\[单右斜线在Java中有特殊意义,因此路径须写两个右斜线,并且必须以'\\'结尾]'"
+ "\n示例:D:\\tmp\\" + "\n---------------------------"
+ "\nLinux注意:" + "\n根路径是从'/'开始,而且路径必须以'/'结尾."
+ "\n示例:/usr/local/tmp/" + "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
String fileAddress = sc.next();
URL url = null;
RandomAccessFile raf = null;
InputStream is = null;
try {
url = new URL(fileURL);
raf = new RandomAccessFile(fileAddress + getFileAddress(url), "rw");
System.out.println("文件长度:" + getFileLength(url));
int hasRead = 0;
is = url.openStream();
byte[] buff = new byte[1024];
while ((hasRead = is.read(buff)) > 0) {
raf.write(buff, 0, hasRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
System.out.println("下载完成!文件名是:" + getFileAddress(url)
+ ",文件大小:" + getFileLength(url));
raf.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 获取文件长度.
*
* @param url
* @return 文件长度
* @throws IOException
*/
private static long getFileLength(URL url) throws IOException {
return url.openConnection().getContentLengthLong();
}

/**
* 获取文件后缀名.
*
* @param url
* @return 资源名称.
*/
private static String getFileAddress(URL url) {
String FileName = url.getPath();
int index = FileName.lastIndexOf("/");
return FileName.substring((index + 1), FileName.length());
}

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据