java从远程url文件流读取文件,并且下载到本地(写个循环就可实现批量)
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class FileUtils {
/**
* 获取远程文件
*
* @param remoteFilePath 远程文件路径
* @param localFilePath 本地文件路径
*/
public static void downloadFile(String remoteFilePath, String localFilePath) {
URL urlfile = null;
HttpURLConnection httpUrl = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
File f = new File(localFilePath);
try {
urlfile = new URL(remoteFilePath);
httpUrl = (HttpURLConnection) urlfile.openConnection();
httpUrl.connect();
bis = new BufferedInputStream(httpUrl.getInputStream());
bos = new BufferedOutputStream(new FileOutputStream(f));
int len = 2048;
byte[] b = new byte[len];
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
bos.flush();
bis.close();
httpUrl.disconnect();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用方法
//如果链接包含中文,需要转码
String resultWordPath = URLEncoderUtils.encode(wordPath);
String fileName = System.currentTimeMillis() + "";
String localPath = Constant.FILE_SAVE_PATH + "/doc/" + fileName + ".doc";
FileUtils.downloadFile(resultWordPath, localPath);
转码工具类
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class URLEncoderUtils {
public static String encode(String url) {
try {
String resultURL = "";
//遍历字符串
for (int i = 0; i < url.length(); i++) {
char charAt = url.charAt(i);
//只对汉字处理
if (isChineseChar(charAt)) {
String encode = URLEncoder.encode(charAt + "", "UTF-8");
resultURL += encode;
} else {
resultURL += charAt;
}
}
return resultURL;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
//判断汉字的方法,只要编码在\u4e00到\u9fa5之间的都是汉字
public static boolean isChineseChar(char c) {
return String.valueOf(c).matches("[\u4e00-\u9fa5]");
}
}