本文介绍如何使用以下方法从URL下载文件:
- Apache Commons IO
- Java NIO
1. Apache Commons IO
1.1这仍然是我首选的从Internet下载文件的简便方法,简洁明了。 阅读签名:
org.apache.commons.io.FileUtils
//int = number of milliseconds
public static void copyURLToFile(URL source, File destination,
int connectionTimeout, int readTimeout) throws IOException
1.2完整示例。
HttpUtils.java
package com.mkyong;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class HttpUtils {
public static void main(String[] args) {
String fromFile = "ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest";
String toFile = "F:\\arin.txt";
try {
//connectionTimeout, readTimeout = 10 seconds
FileUtils.copyURLToFile(new URL(fromFile), new File(toFile), 10000, 10000);
} catch (IOException e) {
e.printStackTrace();
}
}
}
1.3 Maven
pom.xml
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
1.4摇篮
build.gradle
dependencies {
compile 'commons-io:commons-io:2.5'
}
2. Java NIO
2.1尝试以Java 7 NIO为例。
URL website = new URL(fromFile);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(toFile);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
2.2完整示例。
HttpUtils.java
package com.mkyong;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
public class HttpUtils {
public static void main(String[] args) {
String fromFile = "ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest";
String toFile = "F:\\arin.txt";
try {
URL website = new URL(fromFile);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(toFile);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
参考文献
翻译自: https://mkyong.com/java/java-how-to-download-a-file-from-the-internet/