如何在 Java 中创建包含多个文件的 torrent 文件?

Posted

技术标签:

【中文标题】如何在 Java 中创建包含多个文件的 torrent 文件?【英文标题】:How to create a torrent file with multiple files in Java? 【发布时间】:2016-06-28 01:23:27 【问题描述】:

我目前正在尝试实现一个小工具,它可以从文件夹内的一组文件中创建一个.torrent。它适用于单个文件。

据此站点:Torrent_file 多个文件存储在一个文件集中。

这是我到目前为止所做的:

public Map<Object, Object> getFiles(File dict) throws IOException, NoSuchAlgorithmException 

    Map<Object, Object> files = new HashMap<Object, Object>();
    FileOutputStream fos = new FileOutputStream(merged);

    for (File fileEntry : dict.listFiles()) 
    
        if (fileEntry.isFile()) 
        
            Map<String, Object> file = new HashMap<String, Object>();
            file.put("path", fileEntry.getName());
            file.put("length", fileEntry.length());

            FileInputStream fis = new FileInputStream(fileEntry);
            byte[] byteArray = new byte[(int) fileEntry.length()];
            fis.read(byteArray, 0, (int) fileEntry.length());
            fos.write(byteArray);
            fos.flush();
            files.put(file.get("path"), file.get("length"));
        

    
    fos.close();
    pieces = hashPieces(merged, pieceLength);
    return files;

我尝试为每个单独的文件创建一个地图,然后将这些地图放入另一个包含所有文件的地图中。然后我将文件作为文件数组合并到一个大文件中以计算碎片散列。但是,文件结构部分并没有按预期工作。

多个文件的方法被调用:

    // ...
    Map<String, Object> info = new HashMap<String, Object>();
    info.put("name", sharedFile.getName());
    if (sharedFile.isDirectory()) 
        Map<Object, Object> path = getFiles(sharedFile);
        info.put("files", path);
    
    // ...

不知何故我不知道如何组装文件列表。我知道必须使用地图来完成,但我对必须选择什么作为键和值感到绝望。

【问题讨论】:

***是有关 BitTorrent 协议的技术信息的糟糕来源。请改用wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure。 【参考方案1】:

info map中files键下的值不是一个map,它是一个map列表,每个map描述一个文件。

【讨论】:

以上是关于如何在 Java 中创建包含多个文件的 torrent 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式从文件名中创建一个包含多个可能字符串的列表[重复]

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

如何在 Tornado 中创建多个 websocket 聊天?

如何读取文本文件(逐行)并使用输出作为 nameS 在 java 中创建 .pdf 文件?

如何在本机反应中创建充满功能的帮助文件?

如何在 Oracle Apex 中创建包含文件的列表