import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.EnumSet;
public class HttpDownloader {
public File download(URI uri, String fileName) throws IOException {
Path path = Paths.get(fileName);
long totalBytesRead = 0L;
HttpURLConnection con = (HttpURLConnection) uri.resolve(fileName).toURL().openConnection();
con.setReadTimeout(10000);
con.setConnectTimeout(10000);
try (ReadableByteChannel rbc = Channels.newChannel(con.getInputStream());
FileChannel fileChannel = FileChannel.open(path, EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.WRITE));) {
totalBytesRead = fileChannel.transferFrom(rbc, 0, 1 << 22); // download file with max size 4MB
System.out.println("totalBytesRead = " + totalBytesRead);
fileChannel.close();
rbc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return path.toFile();
}
}
Http download using Java NIO FileChannel
Upasana | December 04, 2019 | 1 min read | 115 views
Java’s Channel should always be preferred for IO related stuff because Channel can utilize OS specific optimization while dealing with the files. An input stream can easily be converted to a FileChannel using Channels.newChannel() static factory method.
RealHttpDownloader
FileChannel utilizes OS specific optimization and hence should provide better performance in general compared to any buffered streams.
Top articles in this category:
- CRC32 checksum calculation Java NIO
- Submit Form with Java 11 HttpClient - Kotlin
- Allow insecure SSL in Java 11 HttpClient
- Removing elements while iterating over a Java Collection
- What is volatile keyword in Java
- Fail-Safe vs Fail-Fast Iterator in Java Collections Framework
- Troubleshooting Deadlock in Java
Recommended books for interview preparation:
Book you may be interested in..
Book you may be interested in..