Java:如何为多个文件或目录创建torrent文件?

时间:2011-04-11 22:49:36

标签: java bittorrent

下一个代码是jBitTorrent API for Java的一部分,我有点修改过:

            if (!torr.saveAs.matches(""))
                info.put("name", torr.saveAs);
            else
                info.put("name", "noDirSpec");
            ArrayList files = new ArrayList();
            for (int i = 0; i < torr.name.size(); i++) {
                SortedMap file = new TreeMap();
                file.put("length", (Integer) torr.length.get(i));
//                String[] path = ((String) torr.name.get(i)).split("\\");
                String[] path = ((String) torr.name.get(i)).split("/");
                File f = new File((String)(torr.name.get(i)));
                ArrayList pathList = new ArrayList(path.length);

            if(f.isFile())
            {
                pathList.add(path[path.length - 1]);
            }
            else if(f.isDirectory())
            {

// ??? }

这是torrent文件生成。因此«String [] path»被注释,因为«\\»与linux斜杠不匹配并生成无效路径。多个文件的规范是:

对于多文件模式的情况,信息字典包含以下结构: name:存储所有文件的目录的文件名。这纯粹是建议性的。 (串) files:一个字典列表,每个文件一个。此列表中的每个字典都包含以下键: length:文件的长度,以字节为单位(整数) md5sum :(可选)一个32字符的十六进制字符串,对应于文件的MD5总和。 BitTorrent根本不使用它,但它包含在一些程序中以提高兼容性。 path:包含一个或多个字符串元素的列表,这些字符串元素一起表示路径和文件名。列表中的每个元素对应于目录名称或(在最终元素的情况下)文件名。例如,文件“dir1 / dir2 / file.ext”将包含三个字符串元素:“dir1”,“dir2”和“file.ext”。这被编码为字符串的字符串列表,例如l4:dir14:dir28:file.exte

对于单个文件是:

对于单文件模式的情况,信息字典包含以下结构: name:文件名。这纯粹是建议性的。 (串) length:文件的长度,以字节为单位(整数) md5sum :(可选)一个32字符的十六进制字符串,对应于文件的MD5总和。 BitTorrent根本不使用它,但它包含在一些程序中以提高兼容性。

因此,如果我将以前的代码用于单个文件,这里将生成此torrent: enter image description here

并且torrent文件包含:

d8:announce0:10:由18创建:jBittorrentAPI 1.04:infod6:lengthi1645522e4:name27:ppkBB3cker-free-20101212.7z12:piece lengthi102400e6:pieces340:(ѕн'xІZUЙ ЃКХЪйкжѕЫ>>3УМ<ЁWпЖћA‡,тC;НлАтжѓњЧ0x‡Е%РъEЬ™сЖо6ЦоёSЌ1пж`.бй%»†Ґ0VЩ%“ђђђџhЃ7ЦЭjъ\!RОQ.lВЦрjяGЋХ®^zЏ ЎЉSЖЕ|“1D”кCРк+бћJLХmЛF`Ы“ГљSЪv$Л Оuњi€ЙxQee

好。但是我应该如何为目录生成torrent呢?问题是在未修改的API中将生成具有root完整路径的文件。但是我需要这样的东西: enter image description here 有效的torrent文件是:

d10:由25创建:传输/2.05(11488)13:创建datei1302559094e8:encoding5:UTF-84:infod5:filesld6:lengthi196126e4:pathl29:1231190375_bulldozer.jar.parteed6:lengthi937518e4:pathl13:FIFA_2009-RPL35:240x320-fifa-rpl- 2009(ENG).jar.parteed6:lengthi802555e4:pathl13:FIFA_2009-RPL31:FIFA-09-rpl_176x220_en.jar.parteed6:lengthi985098e4:pathl13:FIFA_2009-RPL36:FIFA_2009-RPL_240x320_(RUS).jar.parteed6:lengthi138534e4:pathl41: GAZilaMarshrutkaUbiyca [game-torrent.info] 41:GAZila_Marshrutka_Ubiyca_176x208.jar.parteed6:lengthi175851e4:pathl41:GAZilaMarshrutkaUbiyca [game-torrent.info] 41:GAZila_Marshrutka_Ubiyca_240x320.jar.parteed6:lengthi827473e4:pathl33:战神3D(240х320).jar。 parteed6:lengthi295164e4:pathl26:Men_In_Black-Alien_Assault39:Men_In_Black-Alien_Assault_176.jar.parteed6:lengthi374046e4:pathl26:Men_In_Black-Alien_Assault39:Men_In_Black-Alien_Assault_240.jar.parteee4:name53:5отличныхигрдлямобильника12:件lengthi32768e6:pieces2900:DSI %|Q§I IoQCIa1R {

1 个答案:

答案 0 :(得分:1)

我建议您使用System.getProperty("file.separator")在所有操作系统上创建有效路径,而不是将其硬编码到Windows文件分隔符(\)

我没有使用过这个API,但查看以下行..

  

对于多文件模式的情况,   信息词典包含   以下结构:名称:   要在其中的目录的文件名   存储所有文件。

我猜你可以用

pathList.add(path[path.length - 1]);

无论File对象是文件还是目录。