作者:陈世佳 编写时间:2018-4-15
创建Reptile类,编写如下java代码。
更改URL url = new URL("http://www.sj33.cn/");中的http://www.sj33.cn/为您想要访问的网址。
更改String filePath = "e:/download";中的e:/download为您想要保存的路径。
然后运行即可。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.String;
public class Reptile {
public static void main(String[] args) throws Exception {
//目标URL
URL url = new URL("http://www.kankan.com/");
//访问编码
String enCoded = "utf-8";
//设置链接的正则表达式
String str = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
//使用getStringByWeb(url,enCoded,str)获取url中的链接的集合
List<String> list = getStringByWeb(url,enCoded,str);
System.out.println("\n<##资源搜集完成##>\n正在下载资源...");
System.out.println("资源数:"+list.size()+"");
for(String Url:list){
//设置储存到本地的路径
String filePath = "e:/download";
//尝试存储Url中的文件到filePath路径下
if(saveUrlAs(Url, filePath,"GET")==1)
System.out.println("Successfully obtaining " + Url.substring(Url.lastIndexOf("/")).substring(1) +" from "+ Url);
}
}
public static List<String> getStringByWeb(URL url,String enCoded,String str) throws IOException{
//从目标url中获取字符流到bufr
BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream(),enCoded));
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(str);
String line = null;
while((line=bufr.readLine())!=null){
System.out.println(line);
Matcher m = p.matcher(line);
//寻找文件链接
while(m.find()){
//将符合规则的数据存储到集合中。
list.add(m.group());
}
}
return list;
}
public static int saveUrlAs(String url,String filePath,String method){
File file=new File(filePath);
//判断文件夹是否存在
if (!file.exists())
{
//如果文件夹不存在,则创建新的的文件夹
file.mkdirs();
}
FileOutputStream fileOut = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
try
{
// 建立链接
URL httpUrl=new URL(url);
conn=(HttpURLConnection) httpUrl.openConnection();
//以Post方式提交表单,默认get方式
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
// post方式不能使用缓存
conn.setUseCaches(false);
//连接指定的资源
conn.connect();
//获取网络输入流
inputStream=conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
//设置文件保存路径(注意文件保存路径的后面一定要加上文件的名称)
//url.substring(url.lastIndexOf("/"))获取文件名称
String fileAdress = filePath+url.substring(url.lastIndexOf("/"));
System.out.println(fileAdress);
//保存文件
fileOut = new FileOutputStream(fileAdress);
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
byte[] buf = new byte[4096];
int length = bis.read(buf);
//保存文件
while(length != -1)
{
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
conn.disconnect();
} catch (Exception e)
{
// e.printStackTrace();
System.out.println("Failed obtaining resource from " + url);
return 0;
}
return 1;
}
}