用各种网络下载工具下文件的时候,大多数下载软件支持添加批量下载任务的功能,闲暇之余coding了一个简单的程序,实现批量下载.
分了三个类
RegFiles.java主要实现通配符文件地址的构造,提供了一些辅助方法,方便的添加需要下载的URL
URLFileSaver.java 实现将URL指向的文件保存到本地的功能
FileDownLoader.java 创建多个线程下载
大家看code,欢迎提出重构意见
package cn.heapstack.study;
import java.util.ArrayList;
import java.util.List;
/** *//**
* <p>
* Title:通配符下载地址构建类
* </p>
* <p>
* Description: 1.0版本支持通配符(*)匹配的URL字符串,该匹配配合通配符长度一起使用<P>
* Example:如果要下载的URL格式为http://www.abc.com/abc(*).zip;
* (*)代表要匹配的数字,
* (*)支持10的通配符长度次方个数字,不足的长度位前面补0
*
* 当通配符长度为1,匹配的下标可以是0-9,这时要下载的URL格式就是 http://www.abc.com/abc0.zip
* http://www.abc.com/abc1.zip http://www.abc.com/abc8.zip
* http://www.abc.com/abc9.zip
*
* 当通配符长度为3,匹配的下标可以是000-999,这时要下载的URL格式就是 http://www.abc.com/abc000.zip
* http://www.abc.com/abc001.zip http://www.abc.com/abc099.zip
* http://www.abc.com/abc999.zip
* </p>
* <p>
* Copyright: Copyright (c) www.heapstack.cn 2006
* </p>
*
* @author jht
* @version 1.0
*/
public class RegFiles {
private List<String> fileList = new ArrayList<String>();
private String regURL;
private int length;
private int from;
private int to;
/** *//**
*
* @param regURL 带通配符(*)的下载文件地址
* @param length 通配符长度
* @param from 起始的数字
* @param to 结束的数字
* @throws Exception
*/
public RegFiles(String regURL, int length, int from, int to) throws Exception {
this.regURL = regURL;
this.length = length;
if(from > to )
throw new Exception("Invalied parameter,from should be less than to");
this.from = from;
this.to = to;
buildDownLoadFileList();
}
public void buildDownLoadFileList() {
fileList.clear();
//regURL like http://www.abc.com/abc(*).zip
//the dest URL like http://www.abc.com/abc001.zip
int index = regURL.indexOf("(*)");
//把(*)替换成相应的需要匹配的URL字符串
StringBuilder sb = new StringBuilder(regURL);
sb = sb.delete(index, index + 3);
for (int j = from; j <= to; j++)
{
StringBuilder tmpsb = new StringBuilder(sb);
String strj = String.valueOf(j);
int strlen = strj.length();
int zerocount = length - strlen;
//add 0 to build the url
for (int k = 0; k < zerocount; k++)
{
StringBuilder jsb = new StringBuilder(strj);
strj = jsb.insert(0,"0").toString();
}
fileList.add(tmpsb.insert(index,strj).toString());
System.out.println(tmpsb.toString());
}
}
public List getFileList() {
return fileList;
}
/** *//**
* 手动设置文件url列表
* @param fileList
*/
public void setFileList(List<String> fileList) {
this.fileList = fileList;
}
/** *//**
* 在原有基础上添加文件url列表
* @param appendList
*/
public void appendFileList(List<String> appendList){
this.fileList.addAll(appendList);
}
/** *//**
* 添加一个要下载的文件url地址
* @param urlfile
*/
public void appedURLFile(String urlfile){
this.fileList.add(urlfile);
}
public int getFrom() {
return from;
}
public void setFrom(int from) {
this.from = from;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getRegURL() {
return regURL;
}
public void setRegURL(String regURL) {
this.regURL = regURL;
}
public int getTo() {
return to;
}
public void setTo(int to) {
this.to = to;
}
}
package cn.heapstack.study;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLFileSaver implements Runnable {
private static final int BUFFER_SIZE = 4096;
private String destUrl;
private String fileName;
public URLFileSaver(String destUrl)
{
this.destUrl = destUrl;
int i = destUrl.lastIndexOf("/");
this.fileName = destUrl.substring(i+1);
}
public void run() {
try {
saveToFile(destUrl,fileName);
System.out.println("文件:"+destUrl+"下载完成,保存为"+fileName);
} catch (IOException e) {
System.out.println("文件下载失败,信息:"+e.getMessage());
}
}
/** *//**
* 将网络文件保存为本地文件的方法
* @param destUrl
* @param fileName
* @throws IOException
*/
public void saveToFile(String destUrl, String fileName) throws IOException {
FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpconn = null;
URL url = null;
byte[] buf = new byte[BUFFER_SIZE];
int size = 0;
// 建立链接
url = new URL(destUrl);
httpconn = (HttpURLConnection) url.openConnection();
// 连接指定的资源
httpconn.connect();
// 获取网络输入流
bis = new BufferedInputStream(httpconn.getInputStream());
// 建立文件
fos = new FileOutputStream(fileName);
System.out.println("正在获取链接[" + destUrl + "]的内容\n将其保存为文件[" + fileName
+ "]");
// 保存文件
while ((size = bis.read(buf)) != -1)
fos.write(buf, 0, size);
fos.close();
bis.close();
httpconn.disconnect();
}
}
package cn.heapstack.study;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.List;
public class FileDownLoader {
public static void saveURLFileList(List<String> urlFileList) {
for (String aURLfile : urlFileList) {
Thread th = new Thread(new URLFileSaver(aURLfile));
th.start();
}
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/** *//**
* 设置代理服务器
*
* @param proxy
* @param proxyPort
*/
public static void setProxyServer(String proxy, String proxyPort) {
System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", proxy);
System.getProperties().put("proxyPort", proxyPort);
}
/** *//**
* 设置认证用户名与密码
*
* @param uid
* @param pwd
*/
public static void setAuthenticator(final String uid, final String pwd) {
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(uid, new String(pwd)
.toCharArray());
}
});
}
}
main函数测试代码
try {
RegFiles rf = new RegFiles("http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty(*).jpg",
2,0,50);
List<String> urlFileList = rf.getFileList();
FileDownLoader.saveURLFileList(urlFileList);
} catch (Exception e) {
System.out.println(e.getMessage());
}
运行效果:
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty00.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty01.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty02.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty03.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty04.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty05.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty06.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty07.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty08.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty09.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty10.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty11.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty12.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty13.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty14.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty15.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty16.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty17.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty18.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty19.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty20.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty21.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty22.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty23.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty24.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty25.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty26.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty27.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty28.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty29.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty30.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty31.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty32.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty33.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty34.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty35.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty36.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty37.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty38.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty39.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty40.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty41.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty42.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty43.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty44.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty45.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty46.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty47.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty48.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty49.jpg
http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty50.jpg
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty14.jpg]的内容
将其保存为文件[933421_TN_061229beauty14.jpg]
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty00.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty33.jpg
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty23.jpg]的内容
将其保存为文件[933421_TN_061229beauty23.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty19.jpg]的内容
将其保存为文件[933421_TN_061229beauty19.jpg]
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty35.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty36.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty37.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty38.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty39.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty40.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty41.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty42.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty49.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty45.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty43.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty44.jpg
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty25.jpg]的内容
将其保存为文件[933421_TN_061229beauty25.jpg]
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty46.jpg
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty15.jpg]的内容
将其保存为文件[933421_TN_061229beauty15.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty24.jpg]的内容
将其保存为文件[933421_TN_061229beauty24.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty26.jpg]的内容
将其保存为文件[933421_TN_061229beauty26.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty27.jpg]的内容
将其保存为文件[933421_TN_061229beauty27.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty29.jpg]的内容
将其保存为文件[933421_TN_061229beauty29.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty02.jpg]的内容
将其保存为文件[933421_TN_061229beauty02.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty03.jpg]的内容
将其保存为文件[933421_TN_061229beauty03.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty11.jpg]的内容
将其保存为文件[933421_TN_061229beauty11.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty17.jpg]的内容
将其保存为文件[933421_TN_061229beauty17.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty28.jpg]的内容
将其保存为文件[933421_TN_061229beauty28.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty16.jpg]的内容
将其保存为文件[933421_TN_061229beauty16.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty04.jpg]的内容
将其保存为文件[933421_TN_061229beauty04.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty09.jpg]的内容
将其保存为文件[933421_TN_061229beauty09.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty10.jpg]的内容
将其保存为文件[933421_TN_061229beauty10.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty18.jpg]的内容
将其保存为文件[933421_TN_061229beauty18.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty01.jpg]的内容
将其保存为文件[933421_TN_061229beauty01.jpg]
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty28.jpg下载完成,保存为933421_TN_061229beauty28.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty16.jpg下载完成,保存为933421_TN_061229beauty16.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty47.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty48.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty31.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty32.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty50.jpg
文件下载失败,信息:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty34.jpg
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty08.jpg]的内容
将其保存为文件[933421_TN_061229beauty08.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty21.jpg]的内容
将其保存为文件[933421_TN_061229beauty21.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty05.jpg]的内容
将其保存为文件[933421_TN_061229beauty05.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty06.jpg]的内容
将其保存为文件[933421_TN_061229beauty06.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty12.jpg]的内容
将其保存为文件[933421_TN_061229beauty12.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty20.jpg]的内容
将其保存为文件[933421_TN_061229beauty20.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty30.jpg]的内容
将其保存为文件[933421_TN_061229beauty30.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty07.jpg]的内容
将其保存为文件[933421_TN_061229beauty07.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty13.jpg]的内容
将其保存为文件[933421_TN_061229beauty13.jpg]
正在获取链接[http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty22.jpg]的内容
将其保存为文件[933421_TN_061229beauty22.jpg]
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty09.jpg下载完成,保存为933421_TN_061229beauty09.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty01.jpg下载完成,保存为933421_TN_061229beauty01.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty18.jpg下载完成,保存为933421_TN_061229beauty18.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty10.jpg下载完成,保存为933421_TN_061229beauty10.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty26.jpg下载完成,保存为933421_TN_061229beauty26.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty29.jpg下载完成,保存为933421_TN_061229beauty29.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty19.jpg下载完成,保存为933421_TN_061229beauty19.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty06.jpg下载完成,保存为933421_TN_061229beauty06.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty08.jpg下载完成,保存为933421_TN_061229beauty08.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty12.jpg下载完成,保存为933421_TN_061229beauty12.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty11.jpg下载完成,保存为933421_TN_061229beauty11.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty07.jpg下载完成,保存为933421_TN_061229beauty07.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty21.jpg下载完成,保存为933421_TN_061229beauty21.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty17.jpg下载完成,保存为933421_TN_061229beauty17.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty04.jpg下载完成,保存为933421_TN_061229beauty04.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty20.jpg下载完成,保存为933421_TN_061229beauty20.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty24.jpg下载完成,保存为933421_TN_061229beauty24.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty25.jpg下载完成,保存为933421_TN_061229beauty25.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty15.jpg下载完成,保存为933421_TN_061229beauty15.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty13.jpg下载完成,保存为933421_TN_061229beauty13.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty02.jpg下载完成,保存为933421_TN_061229beauty02.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty23.jpg下载完成,保存为933421_TN_061229beauty23.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty30.jpg下载完成,保存为933421_TN_061229beauty30.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty03.jpg下载完成,保存为933421_TN_061229beauty03.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty05.jpg下载完成,保存为933421_TN_061229beauty05.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty27.jpg下载完成,保存为933421_TN_061229beauty27.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty14.jpg下载完成,保存为933421_TN_061229beauty14.jpg
文件:http://img2.pconline.com.cn/pconline/0612/28/933421_TN_061229beauty22.jpg下载完成,保存为933421_TN_061229beauty22.jpg
posted on 2006-12-31 15:58
jht 阅读(1167)
评论(0) 编辑 收藏 所属分类:
J2SE