您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关java如何通过url读取远程数据并保持到本地,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
如何我就开始琢磨,最开始,我直接使用Acrobat Reader打开,发现只有目录,没有其他,而且页面上面的都存在,我想可能在正确的内容上增加了一块蒙版,只能用"钥匙"的人可以过滤它,要破解别人的编辑器,短时间肯定是不行的的,网上也有很多人想到的是使用自动化脚本去自动对官方阅读器截图,但是我发现,截图不是一页一页的,这就很懵逼了。最后只能通过在线阅读这条线来想办法。
这个办法和网友的类似,都是保存为图片,如何通过pdf工具制作成pdf。
在线阅读惊奇发现,文档真好,一页一张图片,它已经给你做好,只是每次只更新出当前页的前后几张,其他的会被清除。到这里,思路就有了:
跳转到第n页
拉取刷新出来的额图片路径
保存图片路径到缓存(我使用的是redis)
通过网络工具类,将缓存中的图片地址全部下载到本地本次为图片
将图片通过pdf工作转为pdf
第1步到第3步需要重复,可以使用自动工具和脚本来实现。
第4步写个控制器就可以了,最简单的java接口就行。
第5步直接网上在线服务就可以实现。
为什么需要先缓存在下载咧,这里涉及到一个效率与图片去重和过滤的问题,因为每次调整后获取的图片可能有重复的,存在redis的map中,自动就去重了;也是为了避免一边获取图片路径,一边下载中途异常退出等任务不能正常执行完毕等问题。然后脚本获取路径,后保存到自己的服务器,唯一的问题可能就是跨域的问题。结果发现还是少了几张图,这样就体会出使用缓存的好处了,可以直接通过代码验证少了那几张图,不用去检查jpg文件,少的文件个位数,最后通过手动补全了。
通过这种方式得到的图片,唯一缺陷就是带有"JD读书"字样和图片分辨率不是很高,字体好像带点毛脚。有强迫症或者追求高品质的,就使用官方阅读器吧,个人看了蛮清晰的,是文档,不是图片!!!
下面附上java通过URL获取网络数据保存到本地的代码。
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(); } } }
调用:
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读取远程数据并保持到本地”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。