查找文件的当前大小与文件java的标题中的金额

时间:2014-02-05 05:26:42

标签: java download filesize bittorrent

我一直致力于一个涉及下载种子的小项目。最初我计划使用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);
                }

1 个答案:

答案 0 :(得分:1)

我认为一旦下载文件,您就无法直接从utorrent获取信息。但是你可以使用NIO2 java 7文件apis来检查文件状态,即连续间隔和文件大小的最后修改状态。 由于torrent文件可能会提供有关要下载的文件大小的信息。但是如果大小不完全匹配并且洪流因种子而卡住那么就会出现问题。