Java&Groovy下載文件對比

最近工作有個上傳和下載的相關的測試,所以就寫了一個下載文件(目前都是圖片)的方法。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,歡迎關注。

點擊閱讀原文,查看公衆號歷史文章


本文分享自微信公衆號 - FunTester(NuclearTester)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章