想编写一个java程序,实现多线程批量扫描网络文件的大小、存在与否

jonhy.luo 2011-05-30 01:13:31
首先说一下起因:
发现网络上好多的收费下载程序的下载地址都是直连的。没有防盗链处理。。只要知道地址就能下载。而地址中文件名则是以年月日时分秒为内容。例如:http://***/***/110529130756.zip 就是2011年05月29日13点07分56秒上传的。还有则是以格林尼治时间+到现在时间差的秒数。。。

这些地址通过嵌套FOR循环就出来了。 只是批量地址是否有文件?文件大小几何?都得经过扫描检测。于是才想编写该程序。


思路:①、利用for循环生成地址
②、通过文件下载类、方法和http协议字段,判断文件是否存在、获取文件大小。
③、多线程实现同时扫描
④、记录、输出扫描结果到txt文档。

在此,本人刚刚学完java基础。对多线程和网络操作不是很熟悉。。大家可以帮忙弄一下么?

感谢万分!! 帮忙写一下②、③代码。当然整个程序编写下来也行咯。。O(∩_∩)O~

...全文
304 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2011-06-01
  • 打赏
  • 举报
回复

URL url = new URL("http://192.168.41.82:8080/photobookonline/admin/main/skin/ap/line.gif");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//conn.setDoInput(true);
// conn.setDoOutput(true);
conn.setUseCaches(false);
// conn.setRequestMethod("POST");
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

conn.connect();

// OutputStream out = conn.getOutputStream();

if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
//InputStream in = conn.getInputStream();
System.out.println("type:" + conn.getContentType());
System.out.println("size:" + conn.getContentLength());

}

if (conn.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
System.out.println("not found");
}
beowulf2005 2011-06-01
  • 打赏
  • 举报
回复
for不到两次,人家就ban你IP了
你当人家开网站的都傻阿
jonhy.luo 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 x19881216 的回复:]

主要考虑到http请求头与响应头

按照规律构造出一组文件名

请求服务器地址

得到响应头 404 文件不存在

如果存在则分析响应头,这是我的一个图片响应头

Date Mon, 30 May 2011 07:23:25 GMT
Server Apache/2.2.19 (Win32) mod_jk/1.2.31
Last-Modified Thu, 26 May ……
[/Quote]

请问一下我写 String length = url.getHeader("Content-Length") 显示找不到方法呢?要导入什么包吗?
url是java.net.URL类型
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
主要考虑到http请求头与响应头

按照规律构造出一组文件名

请求服务器地址

得到响应头 404 文件不存在

如果存在则分析响应头,这是我的一个图片响应头

Date Mon, 30 May 2011 07:23:25 GMT
Server Apache/2.2.19 (Win32) mod_jk/1.2.31
Last-Modified Thu, 26 May 2011 08:32:08 GMT
Etag "20000000093b7-1736-4a429a81e1200"
Accept-Ranges bytes
Content-Length 5942
Content-Type image/png
qybao 2011-05-30
  • 打赏
  • 举报
回复
大概跟你说说思路吧
一个线程(可以为主线程)利用for循环生成地址字符串,把地址字符串保存到一个队列中
多个扫描线程分别从队列中取出地址字符串,调用文件下载类的相关方法
各扫面线程根据调用文件下载类的相关方法的返回值,把结果写到文件中

LZ先试着自己写,然后看看写到什么地方时不会,再提问。
napier 2011-05-30
  • 打赏
  • 举报
回复
帮你把代码写出来,估计是不可能的
求人不如求己,既然是刚学,难得有个项目目标,你不如自己做,这个做出来啦,那多线程,文件操作,正则表达式等知识点就掌握啦

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧