我一直在做一个下载急流的小项目。最初,我计划使用ttorrent (Java库)下载我所需要的洪流,但是与uTorrent相比,它的速度要慢一些。我决定通过执行命令行来使用uTorrent。
Process p=Runtime.getRuntime().exec("cmd /c cd C:\\Users\\Administrator\\AppData\\Roaming\\uTorrent & start uTorrent.exe /DIRECTORY C:\\ C:\\"+ CURRENT_DOWNLOADS + ".torrent");
p.waitFor();然而,由于这解决了我的速度问题,它使我无法控制任何东西,如下载完成。我需要知道这一点,因为当它完成下载,我应该收到一条消息到我的电子邮件。因为我不知道文件是什么时候完成的,所以在文件开始下载后不久就会发送电子邮件。下载急流时,它显示为文件的长度为完整文件,并且标题没有任何变化,如添加的后缀或其他任何内容。
I需要一种方法来计算文件的实际大小与头文件中文件的大小,或者根据文件/文件夹中的更改来知道文件何时完成下载
目前为止的一段代码。
String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
folder = new File(path);
listOfFiles = folder.listFiles();
// Beginning of file search loop
boolean fileDownloaded = false;
while (!fileDownloaded) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (files.contains(".mp4") && !files.contains(".part") && listOfFiles[i].length() > 838860800) {
//
File ff = listOfFiles[i];
if(ff.exists()) {
for(int timeout = 100; timeout>0; timeout--) {
RandomAccessFile ran = null;
try {
ran = new RandomAccessFile(ff, "rw");
System.out.println("1");
break; // no errors, done waiting
} catch (Exception ex) {
System.out.println("2");
} finally {
if(ran != null) try {
System.out.println("3");
ran.close();
} catch (IOException ex) {
//do nothing
}
ran = null;
}
try {
System.out.println("4");
Thread.sleep(100); // wait a bit then try again
} catch (InterruptedException ex) {
//do nothing
}
}
System.out.println("5");
} else {
}
try {
GoogleMail.Send("movdload", "********", "**********@gmail.com", "Downloaded!", "http://**********/"+subPath+"/"+listOfFiles[i].getName());
fileDownloaded = true;
} catch (MessagingException e) {
e.printStackTrace();
}
break;
}
}
}
Thread.currentThread().sleep(1000);
}发布于 2014-02-05 05:35:36
我认为一旦文件被下载,您就不能直接从utorrent获得信息。但是您可以使用NIO2 java 7文件apis来不断检查文件状态,即在连续间隔和文件大小的情况下最后修改的状态。因为torrent文件可能会给出要下载的文件大小的信息。但是,如果尺寸不完全匹配,而且由于种子而卡住了洪流,那么就会有一个问题。
https://stackoverflow.com/questions/21569291
复制相似问题