Java:如何为多个文件或目录创建种子文件?
Posted
技术标签:
【中文标题】Java:如何为多个文件或目录创建种子文件?【英文标题】:Java: How to create torrent file for multiple files or directories? 【发布时间】:2011-04-11 22:49:36 【问题描述】:下面的代码是 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:字典列表,每个文件一个。此列表中的每个字典都包含以下键: 长度:文件的长度,以字节为单位(整数) md5sum:(可选)一个 32 字符的十六进制字符串,对应于文件的 MD5 和。 BitTorrent 根本不使用它,但某些程序包含它以提高兼容性。 路径:包含一个或多个字符串元素的列表,这些元素共同表示路径和文件名。列表中的每个元素对应于一个目录名或(在最后一个元素的情况下)文件名。例如,文件“dir1/dir2/file.ext”将包含三个字符串元素:“dir1”、“dir2”和“file.ext”。这被编码为字符串的编码列表,例如 l4:dir14:dir28:file.exte
对于单个文件是:
对于单文件模式,信息字典包含以下结构: 名称:文件名。这纯粹是建议性的。 (细绳) 长度:文件的长度,以字节为单位(整数) md5sum:(可选)一个 32 字符的十六进制字符串,对应于文件的 MD5 和。 BitTorrent 根本不使用它,但某些程序包含它以提高兼容性。
因此,如果我将以前的代码用于单个文件,这里将生成这个 torrent:
种子文件包含:
d8:announce0:10:created by18: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Щ%“ѕђoђџ'hО7ЦЦЭjЏВ\!R ЎЉSЖЕ|„1D”кCРк+бћJLХmЛF`Ы"ГљSЪv$Л Оuњi€ЙxQee
好的。但是我应该如何为目录生成种子?问题是在未修改的 API 中将生成具有来自根目录的完整路径的文件。但我需要这样的东西: 有效的 torrent 文件是:
d10:created by25:Transmission/2.05 (11488)13:creation datei1302559094e8:encoding5:UTF-84:infod5:filesld6:lengthi196126e4:pathl29:1231190375_bulldozer.jar.parteed6:lengthi937518e4:pathl13-rpl-40:Lfi13-rpl-40:2000-2RP 2009(eng).jar.parteed6:lengthi802555e4:pathl13:FIFA_2009-RPL31:fifa-09-rpl_176x220_en.jar.parteed6:lengthi985098e4:pathl13:FIFA_2009-RPL36:FIFA_2009-RPL_240x3620_(rus).jar.parte4:41:3854.jar.parte 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�I��oQ�CI�a1R�0��
【问题讨论】:
【参考方案1】:我建议您使用System.getProperty("file.separator")
在所有操作系统上创建有效路径,而不是将其硬编码到 Windows 文件分隔符 (\)
我没用过这个API,但是看看下面这行..
对于多文件模式的情况, 信息字典包含 以下结构:名称:the 要在其中的目录的文件名 存储所有文件。
我猜你可以使用
pathList.add(path[path.length - 1]);
无论 File 对象是文件还是目录。
【讨论】:
以上是关于Java:如何为多个文件或目录创建种子文件?的主要内容,如果未能解决你的问题,请参考以下文章