gpt4 book ai didi

java通过url读取远程数据并保持到本地的实例代码

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java通过url读取远程数据并保持到本地的实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前几天老姐突然告诉我,她在jd上买了本电子图书,如何买完发现,只能在线或者使用它自己的阅读器看,很不方便,让我给想想办法.

如何我就开始琢磨,最开始,我直接使用acrobat reader打开,发现只有目录,没有其他,而且页面上面的都存在,我想可能在正确的内容上增加了一块蒙版,只能用"钥匙"的人可以过滤它,要破解别人的编辑器,短时间肯定是不行的的,网上也有很多人想到的是使用自动化脚本去自动对官方阅读器截图,但是我发现,截图不是一页一页的,这就很懵逼了。最后只能通过在线阅读这条线来想办法.

这个办法和网友的类似,都是保存为图片,如何通过pdf工具制作成pdf.

在线阅读惊奇发现,文档真好,一页一张图片,它已经给你做好,只是每次只更新出当前页的前后几张,其他的会被清除。到这里,思路就有了:

  1. 跳转到第n页
  2. 拉取刷新出来的额图片路径
  3. 保存图片路径到缓存(我使用的是redis)
  4. 通过网络工具类,将缓存中的图片地址全部下载到本地本次为图片
  5. 将图片通过pdf工作转为pdf

第1步到第3步需要重复,可以使用自动工具和脚本来实现.

第4步写个控制器就可以了,最简单的java接口就行.

第5步直接网上在线服务就可以实现.

为什么需要先缓存在下载咧,这里涉及到一个效率与图片去重和过滤的问题,因为每次调整后获取的图片可能有重复的,存在redis的map中,自动就去重了;也是为了避免一边获取图片路径,一边下载中途异常退出等任务不能正常执行完毕等问题。然后脚本获取路径,后保存到自己的服务器,唯一的问题可能就是跨域的问题。结果发现还是少了几张图,这样就体会出使用缓存的好处了,可以直接通过代码验证少了那几张图,不用去检查jpg文件,少的文件个位数,最后通过手动补全了.

通过这种方式得到的图片,唯一缺陷就是带有"jd读书"字样和图片分辨率不是很高,字体好像带点毛脚。有强迫症或者追求高品质的,就使用官方阅读器吧,个人看了蛮清晰的,是文档,不是图片!!! 。

下面附上java通过url获取网络数据保存到本地的代码.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class httpurlconnectionutil {
// 通过get请求得到读取器响应数据的数据流
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 ;
}
// 将服务器响应的数据流存到本地文件
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();
   }
}
}

调用:

?
1
2
3
4
5
6
7
8
9
10
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);
});

总结 。

以上所述是小编给大家介绍的java通过url读取远程数据并保持到本地的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://blog.51cto.com/yuqian2203/2135284 。

最后此篇关于java通过url读取远程数据并保持到本地的实例代码的文章就讲到这里了,如果你想了解更多关于java通过url读取远程数据并保持到本地的实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com