Java&Groovy下载文件对比
【摘要】 最近工作有个上传和下载的相关的测试,所以就写了一个下载文件(目前都是图片)的方法。Java不过瘾,顺手也找了一下Groovy的下载文件方法。先说结论:Groovy真香。 Java下载文件Java写起来比较麻烦,主要还是抄了一下其他人的代码,测试完之后感觉也不错。 /** * 通过url下载图片 * * @param url * @param name ...
最近工作有个上传和下载的相关的测试,所以就写了一个下载文件(目前都是图片)的方法。Java
不过瘾,顺手也找了一下Groovy
的下载文件方法。
先说结论:Groovy
真香。
Java下载文件
Java
写起来比较麻烦,主要还是抄了一下其他人的代码,测试完之后感觉也不错。
/**
* 通过url下载图片
*
* @param url
* @param name
*/
public static void down(String url, String name) {
File file = new File(name);
logger.info("下载链接:{},存储文件名:{}", url, file.getAbsolutePath());
if (!file.exists())
try {
file.createNewFile();
} catch (IOException e) {
logger.warn("创建文件失败!", e);
}
try (InputStream is = new URL(url).openStream(); OutputStream os = new FileOutputStream(file)) {
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
logger.warn("下载文件失败!", e);
}
}
Groovy下载文件
不得不说Groovy
这种语言操作符用的时候太爽了。
/**
* 从url下载文件
* @param url
* @param name
* @return
*/
static def down(String url, String name) {
new File(name) << new URL(url).openStream()
}
处理文件名
因为这个打算做一个图片的爬虫,所以获取到的图片URL
大比例不会是域名+路径+文件名这样的形式,我搜了几个URL
,发现主要两种不同的类型,一类就是图片后面加了参数,比如URL/a.png?v=3232。还有一类是URL/a.png.webp这类的。
/**
* 处理下载网络图片的时候明文件的问题
* @param name
* @return
*/
static Tuple2 handlePicName(String url) {
url -= ".webp"
String name = url.substring(url.lastIndexOf("/") + 1);
if (name.contains(UNKNOW)) name = name.substring(0, name.indexOf(UNKNOW))
return new Tuple2<String, String>(url, name)
}
这里用了Groovy
元组来存储URL
和name
,除了Tuple2
还有,Tuple3
,Tuple4
,一直到Tuple9
,是不是挺有趣的。
在这个方法里面我先在URL
里面删除了.webp
,因为如果带上这个的话,会导致实际下载的URL
中也会有,使得下载图片质量下降。
改天试一下图片的爬虫效果,敬请期待!
FunTester,腾讯云社区钦定年度作者,非著名测试开发er,欢迎关注。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)