FunTester Java&Groovy 下载文件对比

FunTester · 2021年03月05日 · 700 次阅读

最近工作有个上传和下载的相关的测试,所以就写了一个下载文件(目前都是图片)的方法。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元组来存储URLname,除了Tuple2还有,Tuple3Tuple4,一直到Tuple9,是不是挺有趣的。

在这个方法里面我先在URL里面删除了.webp,因为如果带上这个的话,会导致实际下载的URL中也会有,使得下载图片质量下降。

改天试一下图片的爬虫效果,敬请期待!


FunTester腾讯云社区钦定年度作者,非著名测试开发 er,欢迎关注。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册