import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
/**
* @author Y 2010/04/01 23:39
*/
public class ShutDown {
// easyMule下downloads.txt文件的路径
public static final String FILEPATH = “D:\\Program Files\\easyMule\\downloads.txt”;
// 查找下载记录数的关键字
public static final String KEYWORD = “ed2k://|file|”;
// 刷新读入downloads.txt的时间(秒)
int second = 5;
// 下载完成后关机的延迟时间(秒)
int times = 60;
// 需要监视的文件id号
int id;
// 监视的文件名称
String fileName;
public ShutDown() {
System.out.println(“当前的下载文件信息为:”);
System.out
.println(“————————————————————–”);
showFile(readText(FILEPATH, KEYWORD));
System.out
.println(“————————————————————–”);
System.out.println(“要等哪个文件下载完成关闭计算机?”);
Scanner scan = new Scanner(System.in);
id = scan.nextInt() – 1;
fileName = (String) readText(FILEPATH, KEYWORD).get(id);
System.out.println(“监视的文件是:” + fileName);
while (countDown(second)) {
if (readText(FILEPATH, fileName).size() == 0) {
shutDownComputer(times);
System.out.println(“计算机将在” + times + “秒内关闭”);
System.out.println(“输入任意内容可取消关闭计算机”);
if (null != scan.next()) {
unShutDownComputer();
}
break;
}
}
}
// 利用线程休眠进行倒计时
public boolean countDown(int second) {
for (int i = second; i >= 0; i–) {
try {
Thread.sleep(1000);
if (i == 0) {
return true;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return false;
}
// 读取文件,查找下载的条目,返回List集合
public List readText(String filePath, String searchWord) {
List list = new ArrayList();
File file = new File(filePath);
InputStreamReader reader = null;
BufferedReader br = null;
try {
// downloads.txt文件采用Unicode编码,需要转码
reader = new InputStreamReader(new FileInputStream(file), “utf-16″);
br = new BufferedReader(reader);
String s1 = null;
while ((s1 = br.readLine()) != null) {
int position = s1.indexOf(searchWord);
if (position != -1) {
s1 = s1.substring(0, position).trim();
list.add(s1);
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
// 查看当前下载的记录数
public void showFile(List list) {
Iterator iter = list.iterator();
int count = 1;
while (iter.hasNext()) {
System.out.println(count + “=>” + iter.next());
count++;
}
}
// 关闭计算机
public void shutDownComputer(int times) {
Runtime run = Runtime.getRuntime();
try {
run.exec(“shutdown -s -t” + ” ” + times);
} catch (IOException e) {
e.printStackTrace();
}
}
// 取消关闭计算机
public void unShutDownComputer() {
Runtime run = Runtime.getRuntime();
try {
run.exec(“shutdown -a”);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ShutDown();
}
}
本想用property文件存配置信息,闲麻烦就没加,其实就用到倒计时和查询关键字2个方法就可以,用不着用scanner扫描键盘的录入.下载的时候cmd窗口开着,java ShutDown回车,安心的觉觉了.
代码有局限性,也不健壮,很多明显该添加的异常都没去管,觉得没必要,想自动关机的最简单的办法就是直接用迅雷下载.
水平有限,需要指点的地方,请留言!
分享到:
2010-04-09 14:47
浏览 1486
论坛回复 / 浏览 (22 / 9187)
评论
22 楼
lz12366
2010-05-09
实现的方法 真的很好!读取电驴的下载文件!呵呵!!
21 楼
isy
2010-05-08
小刘而已 写道
要是有程序阻止关机怎么办呢。。。?
当t>0时,默认执行shutdown -f命令,强制关闭所有应用程序,可能有你说的阻止关机的程序,我没进行过其他环境测试
20 楼
小刘而已
2010-05-08
要是有程序阻止关机怎么办呢。。。?
19 楼
isy
2010-04-13
lyw985 写道
很有想法,赞一个。
另外:资源有时候会连接不到。。。。99%,LZ就关不了机了吗?
你可以加一个方法控制最长下载时间,时间到了无论下载完成与否直接执行shutDownComputer()方法
18 楼
lyw985
2010-04-13
很有想法,赞一个。
另外:资源有时候会连接不到。。。。99%,LZ就关不了机了吗?
17 楼
keyboard2000
2010-04-12
电驴正在下载的文件名不是有一定规则的吗?下载完成会hash通过后把文件名改成正常的
16 楼
dplead
2010-04-12
楼主这种精神值得学习。。。
15 楼
Checkmate
2010-04-12
1.可以试试批处理
at+shutdown
2.貌似Java已经有一个定时类了。
14 楼
playboyb
2010-04-12
一直用迅雷下载东东。不过楼主的想法挺好的。学习了!
13 楼
isy
2010-04-12
fishinsky 写道
支持一下,但是不得不说脚本更简单。
原来脚本的原理是检测temp文件夹,现在新版的电驴temp文件夹里已经没有正在下载的临时文件了,所以vbs已经不起作用了.
12 楼
andy54321
2010-04-12
现在迅雷都可以下载任意类型的资源了吧
emule、bt、ftp、http
11 楼
fishinsky
2010-04-12
支持一下,但是不得不说脚本更简单。
10 楼
luffyke
2010-04-12
不错,有想法就最好了
9 楼
Angel_Night
2010-04-12
以前都是用脚本的...
但是作为java程序员 支持一下...
8 楼
greatghoul
2010-04-12
学习这种精神,但正如楼主所说,自动关机的话,用迅雷即可,反正也可以当驴使。
7 楼
bryande
2010-04-11
LZ的研究精神非常值得学习
6 楼
isy
2010-04-10
dongya1987 写道
好文,程序员就要以程序员的方式解决问题
thanks
5 楼
dongya1987
2010-04-10
好文,程序员就要以程序员的方式解决问题
4 楼
isy
2010-04-10
helin 写道
shutdown -s -f -t 0
我控制了关机的时间,在t>0时,默认执行-f命令
3 楼
helin
2010-04-09
shutdown -s -f -t 0
« 上一页 1 2 下一页 »