На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Java: нахождение и скачивание файла


В прошлой статье мы научились парсить сайт (точнее, страницу сайта) с помощью Java. Для примера мы взяли один сайт с музыкой. Однако, мы просто нашли ссылку на страницу с нужной песней, а саму песню не получили. Вот этим и займемся сейчас: получим страницу с песней, найдем на ней ссылку для скачивания и скачаем.

Итак, создаем кнопку «Скачать» и пишем сразу её обработчик (в конструкторе класса):

       Button btnDounload = new Button();
        btnDounload.setText("Скачать");
       btnDounload.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) { 
        //парсим страницу с песней       
           try {

                     doc = Jsoup.connect(sst).get();
                } catch (IOException ex) {
                    Logger.getLogger(FindListen.class.getName()).log(Level.SEVERE, null, ex);
                }
       Elements newsHeadlines2 = doc.select(".jp-play");

        for (Element headline : newsHeadlines2) {
            log("%s\n\t%s", headline.attr("title"), headline.absUrl("href"));          
               sst2 = headline.absUrl("href");
                
            } 
                 
         //скачиваем
         mDounloadThread = new DounloadMusic();	//Создание потока
		mDounloadThread.start();
                flagPlay = 0;
            }
        }); 
Здесь мы пользуемся значением переменной sst, которое мы получили в предыдущей статье. Качаем по этому адресу страницу, а на ней уже ищем прямую ссылку на скачивание песни. Заносится это значение в переменную sst2.

Для самого же скачивания мы используем отдельный класс, наследуемый от Thread:

class DounloadMusic extends Thread
{
	@Override
	public void run()	//Этот метод будет выполнен в побочном потоке
	{
            Platform.runLater(new Runnable(){
                @Override
                public void run() {
FindListen.lbDounload.setText("Подождите, идет скачивание...");
                }
            });
            
      FindListen.lbDounload.setVisible(true);
FindListen.progressBar.setVisible(true);
   try {     
                    FindListen.saveUrl(FindListen.muss, FindListen.sst2);
                    
                } catch (IOException ex) {
                    Logger.getLogger(FindListen.class.getName()).log(Level.SEVERE, null, ex);
                }
   FindListen.progressBar.setVisible(false);
   
               Platform.runLater(new Runnable(){
                @Override
                public void run() {
   FindListen.lbDounload.setText("Скачивание завершено");
                }
            });
	}
}
А вот непосредственно скачиванием занимается этот метод:

  public static void saveUrl(final String filename, final String urlString)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename);

        final byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}


Зачем все так усложнено? Дело в том, что скачивание песни может занять много времени, а в это время нам потребуется работать с интерфейсом программы – для этого и задействуем отдельный поток. Вообще, в Java, очень многое завязано на потока. Непосредственно в этой программе используется еще несколько – для воспроизведения и записи. Но это уже темы других статей…

Если вам требуется помощь по Java или другим языкам программирования, необходимо написать курсовую, практическую или дипломную работу, то вы всегда можете написать мне на почту up777up@yandex.ru. За разумные деньги вам будет оказана быстрая и квалифицированная помощь.




тегизаметки, java, программирование для начинающих, скачивание файла





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Топ 6 онлайн компиляторов Java для студентов
МТС, XP и служба DHCP клиент


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.