我们在开发过程中,可能会遇到需要到远程服务器上下载文件的需求,一般我们的文件可能会有一个url地址,我们拿到这个地址,可以构建URLConnection对象,之后可以根据这个URLConnection来获取InputStream,之后,就可以进行读取并保存文件到本地。
如下所示是一个简单的读取url文件地址,并下载文件到本地conf目录的示例:
package com.xxx.io;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
public class URLFileCopy {
private static final String URL_FILE = "http://localhost:8000/lion.jpg";
public static void main(String[] args) {
try (OutputStream outputStream = Files.newOutputStream(new File("conf/test.jpg").toPath())) {
URL url = new URL(URL_FILE);
URLConnection connection = url.openConnection();
IOUtils.copy(connection.getInputStream(), outputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
这段代码,读取http://localhost:8000/lion.jpg ,并把文件存为本地conf/test.jpg。运行动态截图:
conf目录开始没有test.jpg文件,运行程序,生成了test.jpg。这里对保存的文件进行了修改名称,在实际中,我们可能需要保留原始的文件名,这里只是测试保存这个动作。这里没有通过构建复杂的io流来先读取,然后写入文件,这里调用了IOUtils.copy()这个方法,这个工具类在commons-io库中,我们的项目一般都会引入这个库,所以可以很方便使用起来。