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());
}
}