В настоящее время я пытаюсь реализовать небольшой инструмент, который создает .torrent
из набора файлов внутри папки. Он работает отлично для отдельных файлов.Как создать торрент-файл с несколькими файлами в Java?
В соответствии с этим сайтом: 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);
}
// ...
Как-то я не знаю, как собрать список файлов. Я знаю, что это нужно делать с картой, но я отчаянно желаю, чтобы я выбирал ее как ключ и ценность.
Wikipedia - ужасный источник технической информации о протоколе BitTorrent. Вместо этого попробуйте https://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure. – Encombe