Прежде всего, извините за мой плохой английский, это не мой родной язык. Я кодирую метод, который загружает файл из Интернета. Я знаю, что есть несколько способов сделать это, но моя проблема все еще возникает, независимо от того, какой метод я использую.
Код должен загрузить файл .torrent, и он это делает, но «окончательный» файл, похоже, поврежден. Позвольте мне провести вас через следующие фотографии:
обычный торрент-файл, загруженный из Интернета (с помощью навигатора)
тот же торрент-файл, но загруженный из моего java-кода
Насколько я понимаю, процесс загрузки идет неправильно. Я попробовал следующие два способа, и оба они загружают одну и ту же «закодированную» вещь.
Возможное решение №1 — java.nio
//Get .torrent file
public void getTorrentFile(String torrentURL, String fileName) {
try {
URL website = new URL(torrentURL);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(fileName);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (MalformedURLException mue) { mue.printStackTrace(); }
catch (IOException ioe) {
ioe.printStackTrace(); }
}
}
*Возможное решение №2 – Цикл*
File torrentFile = new File(fileName);
URLConnection conn = new URL(torrentURL).openConnection();
conn.connect();
try (InputStream in = conn.getInputStream(); OutputStream out = new FileOutputStream(torrentFile)) {
int b = 0;
while (b != -1) {
b = in.read();
if (b != -1) {
out.write(b);
}
}
} catch (IOException ioe) { ioe.printStackTrace(); }
} catch (IOException ioe) { ioe.printStackTrace(); }
Как я уже говорил, эти 2 решения неверны. Они полезны для загрузки файла, но некоторые торренты, которые я хочу скачать, приходят поврежденными.
Почему мой файл приходит на мой компьютер «поврежденным»? Заранее спасибо.
fos.close()
в блокеfinally
, и это, вероятно, решит вашу проблему. - person Guillaume Polet   schedule 28.06.2014