国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > Java > 正文

java通過(guò)url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的實(shí)例代碼

2024-07-14 08:41:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前幾天老姐突然告訴我,她在JD上買(mǎi)了本電子圖書(shū),如何買(mǎi)完發(fā)現(xiàn),只能在線或者使用它自己的閱讀器看,很不方便,讓我給想想辦法。

如何我就開(kāi)始琢磨,最開(kāi)始,我直接使用Acrobat Reader打開(kāi),發(fā)現(xiàn)只有目錄,沒(méi)有其他,而且頁(yè)面上面的都存在,我想可能在正確的內(nèi)容上增加了一塊蒙版,只能用"鑰匙"的人可以過(guò)濾它,要破解別人的編輯器,短時(shí)間肯定是不行的的,網(wǎng)上也有很多人想到的是使用自動(dòng)化腳本去自動(dòng)對(duì)官方閱讀器截圖,但是我發(fā)現(xiàn),截圖不是一頁(yè)一頁(yè)的,這就很懵逼了。最后只能通過(guò)在線閱讀這條線來(lái)想辦法。

這個(gè)辦法和網(wǎng)友的類(lèi)似,都是保存為圖片,如何通過(guò)pdf工具制作成pdf。

在線閱讀驚奇發(fā)現(xiàn),文檔真好,一頁(yè)一張圖片,它已經(jīng)給你做好,只是每次只更新出當(dāng)前頁(yè)的前后幾張,其他的會(huì)被清除。到這里,思路就有了:

  1. 跳轉(zhuǎn)到第n頁(yè)
  2. 拉取刷新出來(lái)的額圖片路徑
  3. 保存圖片路徑到緩存(我使用的是redis)
  4. 通過(guò)網(wǎng)絡(luò)工具類(lèi),將緩存中的圖片地址全部下載到本地本次為圖片
  5. 將圖片通過(guò)pdf工作轉(zhuǎn)為pdf

第1步到第3步需要重復(fù),可以使用自動(dòng)工具和腳本來(lái)實(shí)現(xiàn)。

第4步寫(xiě)個(gè)控制器就可以了,最簡(jiǎn)單的java接口就行。

第5步直接網(wǎng)上在線服務(wù)就可以實(shí)現(xiàn)。

為什么需要先緩存在下載咧,這里涉及到一個(gè)效率與圖片去重和過(guò)濾的問(wèn)題,因?yàn)槊看握{(diào)整后獲取的圖片可能有重復(fù)的,存在redis的map中,自動(dòng)就去重了;也是為了避免一邊獲取圖片路徑,一邊下載中途異常退出等任務(wù)不能正常執(zhí)行完畢等問(wèn)題。然后腳本獲取路徑,后保存到自己的服務(wù)器,唯一的問(wèn)題可能就是跨域的問(wèn)題。結(jié)果發(fā)現(xiàn)還是少了幾張圖,這樣就體會(huì)出使用緩存的好處了,可以直接通過(guò)代碼驗(yàn)證少了那幾張圖,不用去檢查jpg文件,少的文件個(gè)位數(shù),最后通過(guò)手動(dòng)補(bǔ)全了。

通過(guò)這種方式得到的圖片,唯一缺陷就是帶有"JD讀書(shū)"字樣和圖片分辨率不是很高,字體好像帶點(diǎn)毛腳。有強(qiáng)迫癥或者追求高品質(zhì)的,就使用官方閱讀器吧,個(gè)人看了蠻清晰的,是文檔,不是圖片!!!

下面附上java通過(guò)URL獲取網(wǎng)絡(luò)數(shù)據(jù)保存到本地的代碼。

public class HttpURLConnectionUtil {// 通過(guò)get請(qǐng)求得到讀取器響應(yīng)數(shù)據(jù)的數(shù)據(jù)流public static InputStream getInputStreamByGet(String url) {  try {    HttpURLConnection conn = (HttpURLConnection) new URL(url)        .openConnection();    conn.setReadTimeout(5000);    conn.setConnectTimeout(5000);    conn.setRequestMethod("GET");    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {      InputStream inputStream = conn.getInputStream();      return inputStream;    }  } catch (IOException e) {    e.printStackTrace();  }  return null;}// 將服務(wù)器響應(yīng)的數(shù)據(jù)流存到本地文件public static void saveData(InputStream is, File file) {  try (BufferedInputStream bis = new BufferedInputStream(is);     BufferedOutputStream bos = new BufferedOutputStream(         new FileOutputStream(file));) {    byte[] buffer = new byte[1024];    int len = -1;    while ((len = bis.read(buffer)) != -1) {      bos.write(buffer, 0, len);      bos.flush();    }  } catch (IOException e) {    e.printStackTrace();  }}}

調(diào)用:

Set<String> imgNumber = (Set<String>) redisTemplate.opsForHash().keys(MAP_KEY);imgNumber.stream().forEach(e->{        String url = (String) redisTemplate.opsForHash().get(MAP_KEY,e);        String fileName = e+".jpg";        File file = new File("E://pdf圖片//", fileName);        InputStream inputStream = HttpURLConnectionUtil            .getInputStreamByGet(url);        HttpURLConnectionUtil.saveData(inputStream, file);});

總結(jié)

以上所述是小編給大家介紹的java通過(guò)url讀取遠(yuǎn)程數(shù)據(jù)并保持到本地的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂昌县| 衡阳市| 丽江市| 岑溪市| 江山市| 汝城县| 鄂托克旗| 榆社县| 新丰县| 井陉县| 信丰县| 新津县| 开远市| 青海省| 聂拉木县| 柳林县| 自贡市| 安化县| 二连浩特市| 木里| 泽库县| 庄河市| 龙口市| 哈巴河县| 班玛县| 乐清市| 柞水县| 平乡县| 明光市| 揭阳市| 斗六市| 乌恰县| 山阴县| 内丘县| 崇州市| 吴桥县| 渑池县| 宾川县| 赞皇县| 西乌| 天气|