我一直致力于一个涉及下载种子的小项目。最初我计划使用ttorrent(Java BitTorrent Library)来下载我需要的种子,但是与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();
然而,由于这解决了我的速度问题,它阻止我控制任何事情,例如下载完成时。我需要知道这一点,因为当它完成下载后,我应该收到一条消息给我的电子邮件。由于我不知道文件何时完成,因此在文件开始下载后不久就会发送电子邮件。下载torrent时,它显示为文件的长度为完整文件,标题没有变化,例如添加的后缀或任何内容。
我需要一种方法来计算一个文件的实际大小和头文件中的文件大小,或者根据文件/文件夹的变化知道文件下载时的替代方法
到目前为止的一段代码。
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);
}
答案 0 :(得分:1)
我认为一旦下载文件,您就无法直接从utorrent获取信息。但是你可以使用NIO2 java 7文件apis来检查文件状态,即连续间隔和文件大小的最后修改状态。 由于torrent文件可能会提供有关要下载的文件大小的信息。但是如果大小不完全匹配并且洪流因种子而卡住那么就会出现问题。