io流读取json并下载pdf文档并写入文件

1.首先将json文件放入磁盘中,(需要保证确定是json格式,根据实际需求放入响应的文件,要保证java能够正常读取)
在这里插入图片描述

2.引入jar包

   <dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

    </dependencies>

3.创建工具类

下载pdf

package com.lsp.utils;

import java.io.*;
import java.net.*;

/**
 * @Author: liusupeng
 * @Date: 2021/7/13 19:00
 */
public class DownloadPdf {

    /**
     * 从网络Url中下载文件
     * @param urlStr
     * @param fileName
     * @param savePath
     * @throws IOException
     */
    public static void  downLoadByUrl(String urlStr,String fileName,String savePath) throws IOException {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(5*1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        //获取自己数组
        byte[] getData = readInputStream(inputStream);
        //文件保存位置
        File saveDir = new File(savePath);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        File file = new File(saveDir+ File.separator+fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        if(fos!=null){
            fos.close();
        }
        if(inputStream!=null){
            inputStream.close();
        }
        System.out.println("info:"+url+" download success");

    }


    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }


}

读取json文件

package com.lsp.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lsp.Policy;


import java.io.*;
import java.util.ArrayList;
import java.util.List;


public class JsonTest {

    //读取json文件
    public static String readJsonFile(String fileName) {
        String jsonStr = "";
        try {
            File jsonFile = new File(fileName);
            FileReader fileReader = new FileReader(jsonFile);
            Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"UTF-8");
            int ch = 0;
            StringBuffer sb = new StringBuffer();
            while ((ch = reader.read()) != -1) {
                sb.append((char) ch);
            }
            fileReader.close();
            reader.close();
            jsonStr = sb.toString();
            return jsonStr;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }



}

4.逻辑代码

package com.lsp.mq.io;

import com.alibaba.fastjson.JSONArray;
import com.lsp.Policy;
import com.lsp.utils.DownloadPdf;
import org.apache.commons.io.FileUtils;

import javax.print.DocFlavor;
import java.io.*;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @Author: liusupeng
 * @Date: 2021/7/13 18:06
 */
public class IoTest {

    public static void main(String[] args){

    List<Integer> beginInteger =new ArrayList<>();

        String dir ="H://data.json";

        try {
        //准备读取json文件
            File file = new File(dir);
            if (!file.exists()) {
                file.createNewFile();
            }
            String str= FileUtils.readFileToString(file, "UTF-8");
            //转成list集合,这里根据实际需求去类型转换
            List<Map<String,Object>> parse= (List) JSONArray.parse(str);
        //输出下数量看下是否读取的正确数据
            System.out.println(parse.size());
  
            parse.forEach(e->{
            //创建file对象
                File file1 = new File("H://gds//"+e.get("title_of_policy_paper"));
             //创建文件夹
                file1.mkdir();
                try {
                //开始下载
                    DownloadPdf.downLoadByUrl((String) e.get("policy_text"),e.get("title_of_policy_paper")+".pdf",file1.toString());
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                    System.out.println(e.get("id"));
                }
                //计数器
                beginInteger.add((Integer) e.get("id"));
       //在判断下是否存在集合
                List<Map<String,Object>> files = (List) e.get("files");
                if(files!=null&&files.size()>0){
                //和上面操作一致在文件夹里下载文件
                    files.forEach(f->{
                        File file2 = new File("H://gds//"+e.get("title_of_policy_paper")+"//"+f.get("file_name"));
                        file2.mkdirs();
                        try {
                            DownloadPdf.downLoadByUrl((String) f.get("url"),f.get("file_name")+".pdf",file2.toString());
                        } catch (IOException ioException) {
                            ioException.printStackTrace();
                        }
                    });
                }
            });


        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("shuliang:"+beginInteger.size());

    }



}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值