code: public TorrentManager addTorrent(String dotTorrentFilePath,
                                     String downloadDirPath,
                                     PieceStorageFactory pieceStorageFactory,
                                     List<TorrentListener> listeners) throws IOException {
      FileMetadataProvider metadataProvider = new FileMetadataProvider(dotTorrentFilePath);
      TorrentMetadata metadata = metadataProvider.getTorrentMetadata();
      FileCollectionStorage fileCollectionStorage = FileCollectionStorage.create(metadata, new File(downloadDirPath));
      PieceStorage pieceStorage = pieceStorageFactory.createStorage(metadata, fileCollectionStorage);
      return addTorrent(metadataProvider, pieceStorage, listeners);
    }
docs: Adds torrent to storage with specified {@link PieceStorageFactory}.
  It can be used for skipping initial validation of data
  
  @param dotTorrentFilePath path to torrent metadata file
  @param downloadDirPath    path to directory where downloaded files are placed
  @param pieceStorageFactory factory for creating {@link PieceStorage}.
  @return {@link TorrentManager} instance for monitoring torrent state
  @throws IOException if IO error occurs in reading metadata file