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, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

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




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



Управление курсором и окнами в C#
Группировка чисел на C#
9 советов для разработчиков JavaScript