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