Tags:

Download file từ URL bất kỳ

Việc download một tập tin trên internet là một trong những công việc mà chúng ta làm hằng cách. Vậy chúng ta sẽ tìm cách download một tập tin từ internet thông qua java.net.URL#openStream() cho phép download các tập tin từ URL trong Java. 

package fa.training.main;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

class JavaDownloadFileFromURL {

    public static void main(String[] args) {
        String url = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css";
        String storeFile = "./src/bootstrap.css";

        try {
            downloadUsingNIO(url, storeFile);

            downloadUsingStream(url, storeFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void downloadUsingStream(String urlStr, String file) throws IOException{
        URL url = new URL(urlStr);
        BufferedInputStream bis = new BufferedInputStream(url.openStream());
        FileOutputStream fis = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int count=0;
        while((count = bis.read(buffer,0,1024)) != -1)
        {
            fis.write(buffer, 0, count);
        }
        fis.close();
        bis.close();
    }

    private static void downloadUsingNIO(String urlStr, String file) throws IOException {
        URL url = new URL(urlStr);
        ReadableByteChannel rbc = Channels.newChannel(url.openStream());
        FileOutputStream fos = new FileOutputStream(file);
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        fos.close();
        rbc.close();
    }

}

Trong đó có cả 2 cách:

  • Sử dụng BufferedInputStream và FileOutputStream để đọc và ghi dữ liệu vào file dưới local.
  • Sử dụng JavaNIO với các hàm cung cấp sẵn giúp mã trong ngắn gọn hơn. 

Nguồn

Java Download File from URL

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x