java写的电驴下载完成关机小程序

来源:互联网 发布:雅诗兰黛淘宝旗舰店 编辑:程序博客网 时间:2024/04/28 06:19

经常用到电驴下载资料,一些http你根本找不到的资源,当然速度是不能恭维了,驴子么,干的就是慢活,热门资源除外…

我用的verycd版的电驴,原版电驴的一种mods,电驴貌似有N多版本,不过我觉得verycd的就够用了,毕竟国内八成的人都在用.

最近在下新东方的新概念英语教程,进度87%,眼看要下完了,等要等1个多小时,下载完成又不自动关机,很是苦恼,虽然verycd一直提倡共享互联网,下载完成关机也是违背了电驴的分享精神,可国家还一直提倡节能减排呢,机箱嗡嗡响也耽误我的睡眠质量…再三矛盾之下,还是决定写一个小程序备用.我开机的时候接着分享就是了.

刚开始搜了一下网上的自动关机程序,真是天下文章一大抄,看的最多的版本就是检测根目录下的temp文件夹,用vbs脚本编写,还有其他的版本,反正是没找到可以用的,自己翻了翻temp文件夹,发现里面什么都没有….这文章也够陈旧的了,自己研究下verycd下载套路,发现一个downloads.txt文件同步正在下载的资源信息,下载完成后自动删除里面的记录,这就简单多了.

思路:读downloads.txt文件,利用关键字把里面的记录分割后加入list,选择监视的文件名,利用while循环的倒计时方法以文件名为关键字从list里定时搜索,如果下载完成,调用runtime类运行dos命令shutdown,执行关机.代码如下:

Java代码 复制代码
  1. import java.io.BufferedReader;    
  2. import java.io.File;    
  3. import java.io.FileInputStream;    
  4. import java.io.FileNotFoundException;    
  5. import java.io.IOException;    
  6. import java.io.InputStreamReader;    
  7. import java.io.UnsupportedEncodingException;    
  8. import java.util.ArrayList;    
  9. import java.util.Iterator;    
  10. import java.util.List;    
  11. import java.util.Scanner;    
  12.   
  13. /**   
  14. * @author Y 2010/04/01 23:39   
  15. */    
  16. public class ShutDown {    
  17. // easyMule下downloads.txt文件的路径    
  18. public static final String FILEPATH = “D://Program Files//easyMule//downloads.txt”;    
  19.   
  20. // 查找下载记录数的关键字    
  21. public static final String KEYWORD = “ed2k://|file|”;    
  22.   
  23. // 刷新读入downloads.txt的时间(秒)    
  24. int second = 5;    
  25.   
  26. // 下载完成后关机的延迟时间(秒)    
  27. int times = 60;    
  28.   
  29. // 需要监视的文件id号    
  30. int id;    
  31.   
  32. // 监视的文件名称    
  33. String fileName;    
  34.   
  35. public ShutDown() {    
  36.   System.out.println(“当前的下载文件信息为:”);    
  37.   System.out    
  38.     .println(“————————————————————–”);    
  39.   showFile(readText(FILEPATH, KEYWORD));    
  40.   System.out    
  41.     .println(“————————————————————–”);    
  42.   System.out.println(“要等哪个文件下载完成关闭计算机?”);    
  43.   Scanner scan = new Scanner(System.in);    
  44.   id = scan.nextInt() – 1;    
  45.   fileName = (String) readText(FILEPATH, KEYWORD).get(id);    
  46.   System.out.println(“监视的文件是:” + fileName);    
  47.   while (countDown(second)) {    
  48.   
  49.    if (readText(FILEPATH, fileName).size() == 0) {    
  50.     shutDownComputer(times);    
  51.     System.out.println(“计算机将在” + times + “秒内关闭”);    
  52.     System.out.println(“输入任意内容可取消关闭计算机”);    
  53.     if (null != scan.next()) {    
  54.      unShutDownComputer();    
  55.     }    
  56.     break;    
  57.    }    
  58.   }    
  59. }    
  60.   
  61. // 利用线程休眠进行倒计时    
  62. public boolean countDown(int second) {    
  63.   for (int i = second; i >= 0; i–) {    
  64.    try {    
  65.     Thread.sleep(1000);    
  66.     if (i == 0) {    
  67.      return true;    
  68.     }    
  69.    } catch (InterruptedException e) {    
  70.     e.printStackTrace();    
  71.    }    
  72.   }    
  73.   return false;    
  74. }    
  75.   
  76.   
  77.   
  78. // 读取文件,查找下载的条目,返回List集合    
  79. public List readText(String filePath, String searchWord) {    
  80.   List list = new ArrayList();    
  81.   File file = new File(filePath);    
  82.   InputStreamReader reader = null;    
  83.   BufferedReader br = null;    
  84.   try {    
  85.    // downloads.txt文件采用Unicode编码,需要转码    
  86.    reader = new InputStreamReader(new FileInputStream(file), “utf-16″);    
  87.    br = new BufferedReader(reader);    
  88.    String s1 = null;    
  89.    while ((s1 = br.readLine()) != null) {    
  90.     int position = s1.indexOf(searchWord);    
  91.     if (position != -1) {    
  92.      s1 = s1.substring(0, position).trim();    
  93.      list.add(s1);    
  94.   
  95.     }    
  96.    }    
  97.   } catch (UnsupportedEncodingException e) {    
  98.    e.printStackTrace();    
  99.   } catch (FileNotFoundException e) {    
  100.    e.printStackTrace();    
  101.   } catch (IOException e) {    
  102.    e.printStackTrace();    
  103.   } finally {    
  104.    try {    
  105.     br.close();    
  106.     reader.close();    
  107.    } catch (IOException e) {    
  108.     e.printStackTrace();    
  109.    }    
  110.   
  111.   }    
  112.   
  113.   return list;    
  114.   
  115. }    
  116.   
  117. // 查看当前下载的记录数    
  118. public void showFile(List list) {    
  119.   Iterator iter = list.iterator();    
  120.   int count = 1;    
  121.   while (iter.hasNext()) {    
  122.    System.out.println(count + “=>” + iter.next());    
  123.    count++;    
  124.   }    
  125. }    
  126.   
  127. // 关闭计算机    
  128. public void shutDownComputer(int times) {    
  129.   Runtime run = Runtime.getRuntime();    
  130.   try {    
  131.    run.exec(“shutdown -s -t” + ” ” + times);    
  132.   } catch (IOException e) {    
  133.    e.printStackTrace();    
  134.   }    
  135. }    
  136.   
  137. // 取消关闭计算机    
  138. public void unShutDownComputer() {    
  139.   Runtime run = Runtime.getRuntime();    
  140.   try {    
  141.    run.exec(“shutdown -a”);    
  142.   } catch (IOException e) {    
  143.    e.printStackTrace();    
  144.   }    
  145. }    
  146.   
  147. public static void main(String[] args) {    
  148.   new ShutDown();    
  149.   
  150. }    
  151.   
  152. }   



本想用property文件存配置信息,闲麻烦就没加,其实就用到倒计时和查询关键字2个方法就可以,用不着用scanner扫描键盘的录入.下载的时候cmd窗口开着,java ShutDown回车,安心的觉觉了.

代码有局限性,也不健壮,很多明显该添加的异常都没去管,觉得没必要,想自动关机的最简单的办法就是直接用迅雷下载.
水平有限,需要指点的地方,请留言!