Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разное тестирование > Менеджер закачек на JAVA


Автор: sergejzr 26.10.2004, 18:00
А что? Давайте напишем качалку на яве! :)
Сделаем межплатформенного OpenSource конкуррента ReGet'у!
Дополним новыми возможностями.
Прога должна получится лёгкая и многофункциональная!

Я начну с голого движка :)

Вот это копирует файл вам на диск:
Необходимо доработать:
  • проловить все ексепшены и сообщать юзеру ошибки детально.
  • Убрать штуку в отдельный поток, чтобы можно было контроллировать
  • реализовать докачку.
  • реализовать несколько потоков.
  • предусмотреть скачивание очень больших файлов. В этом случае следует списывать мегов по 10 на диск, а потом собирать
  • определить оптимальный размер баффера
  • Вести логи, сколько байт скачано для последующей дозагрузки
  • Ввести возможность вставки плагинов.
С этим движком вопрос скорее времени, чем разработки :)
Все разработки постуем в эту тему. В конце должна получится вещь :)
Активным участникам плюсы :)
Код

import java.io.*;
import java.util.regex.*;
import java.util.*;
import java.net.*;
import java.nio.channels.*;

public class HttpDownloader
{
/*
   Здесь всё понятно забираем FromUrl и записываем на диск как ToFile
*/
public void urlDownload(URL FromUrl,File ToFile) throws Exception
{
 ReadableByteChannel bc = Channels.newChannel(FromUrl.openStream());
 FileChannel fc = (new FileOutputStream(ToFile)).getChannel();

 int pos = 0;// Позиция в файле
 int transferunit = 1024;// Будем переписывать по 1024 байт
 int len;// сколько переписалось на самом деле

 while((len = (int)fc.transferFrom(bc,(long)pos,(long)transferunit)) == transferunit)
 {
  System.out.println("Zachital");
  pos += len;
 }
 System.out.println("Gotovo!");
 bc.close();
 fc.close();

}
public static void main(String[] args)
{
 HttpDownloader HDwler=new HttpDownloader();
 try
 {
  HDwler.urlDownload(new URL("http://www.google.de"),new File("index.html"));
 }
 catch (Exception e)
 {
  System.out.println("Download aborted");
 }
}

}

Автор: htrader 13.11.2006, 18:20
Можно ещё с потоками поманипулировать

Или разбросать задачу по машинам в ЛВС... так быстрее

Автор: xpvit 2.1.2007, 15:45
Проект загнулся?? Что насчёт GUI??

Автор: nerezus 2.1.2007, 16:09
xpvit, ну а как ты думаешь?
если учесть, что единственный кусок кода ничего не поддерживает. Ни потоков. Ни собственно докаячки.
И вообще такой кусок на апи, например, в 1 строку пишется.

Автор: sergejzr 2.1.2007, 16:13
Я как линух деинсталлировал, к разработкам на яве интерес приутух. Если кто хочет проект вести - пожалуйста!

Автор: Fubu_By 14.2.2007, 04:14
Всем доброго времени суток.
Как сделать чтобы можно было считывать не спервой позиции а например с 5, яменял значение pos, но файл в который записывается остаётся пустым((((.
и как можно сделать что в файл дописывались данные а не стерали, допустим качаю файл мегов так 100, а на 50 облом выкинуло или спать захотелось)) не начинать же мне качать с начала, хчеться продолжить, как это можно реализовать???

Автор: Ch0bits 14.2.2007, 19:21
Может кому поможет: типичный менеджер закачки на Java описан в книге "Искусство программирования на Java" (Герберт Шилд, Джейм Холмс). К нему остаётся только многопоточность прикрутить, дерево каталогов закачки и планировщик.  smile 

Автор: Fubu_By 14.2.2007, 22:42
Цитата(Ch0bits @ 14.2.2007,  19:21)
Может кому поможет: типичный менеджер закачки на Java описан в книге "Искусство программирования на Java" (Герберт Шилд, Джейм Холмс). К нему остаётся только многопоточность прикрутить, дерево каталогов закачки и планировщик.  smile

аможет подскажешь где скачать книгу?

Автор: Ch0bits 15.2.2007, 00:32
Не знаю, у меня бумажная.

Автор: Fubu_By 19.2.2007, 02:38
ну так что тема замялась?(((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)