Java批量寫入文件和下載圖片的示例代碼
很久沒有在WhitMe上寫日記了,因?yàn)橛X著在App上寫私密日記的話肯定是不安全的,但是想把日記存下來。,然后看到有導(dǎo)出日記的功能,就把日記導(dǎo)出了(還好可以直接導(dǎo)出,不然就麻煩點(diǎn))。導(dǎo)出的是一個(gè)html文件??梢灾苯哟蜷_,排版都還在。
看了下源碼,是把日記存在一個(gè)json數(shù)組里了,圖片還是在服務(wù)器,利用url訪問,文字是在本地了。 但是想把圖片下載到本地,然后和文字對應(yīng),哪篇日記下的哪些圖片。
大概是如下的json數(shù)組。 大概有幾百條,分別是頭像、內(nèi)容:文字||內(nèi)容:圖片、時(shí)間。 簡單明了的json結(jié)構(gòu),就想著用java遍歷保存到本地。
[{
"avatar": "http://static.withme.cn/585****",
"blocks": [{
"content": "今天天氣不錯(cuò)******",
"type": "text"
}, {
"content": "http://static.withme.cn/84ac***",
"type": "pic"
}, {
"content": "http://static.withme.cn/5af2c***",
"type": "pic"
}, {
"content": "http://static.withme.cn/9a4e****",
"type": "pic"
}, {
"content": "http://static.withme.cn/9ffdb***",
"type": "pic"
}, {
"content": "http://static.withme.cn/da5e7db***",
"type": "pic"
}, {
"content": "http://static.withme.cn/e6ccf3764***",
"type": "pic"
}, {
"content": "http://static.withme.cn/73ca***",
"type": "pic"
}, {
"content": "http://static.wi***",
"type": "pic"
}, {
"content": "http://static.withme.cn/4cf7dde****",
"type": "pic"
}],
"dateStr": "2018-09-03",
"timeStr": "18:59:41"
},{...},...]
將json數(shù)組格式化確保正確然后轉(zhuǎn)成json數(shù)組遍歷。獲取到的圖片下載,文字寫入文檔。
public static void main(String[] args) {
CloseableHttpClient client = null;
JSONArray jsonArray = JSONArray.parseArray(
"[{
"avatar": "http://static.withme.cn/585****",
"blocks": [{
"content": "今天天氣不錯(cuò)******",
"type": "text"
}, {
"content": "http://static.withme.cn/84ac***",
"type": "pic"
}, {
"content": "http://static.withme.cn/5af2c***",
"type": "pic"
}, {
"content": "http://static.withme.cn/9a4e****",
"type": "pic"
}, {
"content": "http://static.withme.cn/9ffdb***",
"type": "pic"
}, {
"content": "http://static.withme.cn/da5e7db***",
"type": "pic"
}, {
"content": "http://static.withme.cn/e6ccf3764***",
"type": "pic"
}, {
"content": "http://static.withme.cn/73ca***",
"type": "pic"
}, {
"content": "http://static.wi***",
"type": "pic"
}, {
"content": "http://static.withme.cn/4cf7dde****",
"type": "pic"
}],
"dateStr": "2018-09-03",
"timeStr": "18:59:41"
},{...},{...},...]");
try {
for (int m = 0; m < jsonArray.size(); m++) {
JSONObject jsonPas = jsonArray.getJSONObject(m);
JSONArray array = JSONArray.parseArray(jsonPas.get("blocks").toString());
String time = jsonPas.get("dateStr").toString();
for (int j = 0; j < array.size(); j++) {
JSONObject jsPas = array.getJSONObject(j); // 遍歷 jsonarray 數(shù)組,把每一個(gè)對象轉(zhuǎn)成 json 對象
if (jsPas.get("type").equals("text")) {
FileWriter fileWriter = null;
try {
String filePath = "f:/13/" + time;
File dir = new File(filePath);
// 檢查放置文件的文件夾路徑是否存在,不存在則創(chuàng)建
if (!dir.exists()) {
dir.mkdirs();// mkdirs創(chuàng)建多級目錄
}
File checkFile = new File(filePath + "/text" + time + "-" + j + ".txt");
// 檢查目標(biāo)文件是否存在,不存在則創(chuàng)建
if (!checkFile.exists()) {
checkFile.createNewFile();// 創(chuàng)建目標(biāo)文件
}
// FileWriter(File file, boolean append),append為true時(shí)為追加模式,false或缺省則為覆蓋模式
fileWriter = new FileWriter(checkFile, true);
String url = jsPas.get("content").toString();
// 向目標(biāo)文件中寫入內(nèi)容
fileWriter.append(url);
fileWriter.flush();
System.out.println("寫入成功??!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (jsPas.get("type").equals("pic")) {
client = HttpClients.createDefault();
String url = jsPas.get("content").toString();
String path = "f:/13/" + time;
// System.out.println(jsPas.get("content"));
httpGetImg(client, url, path + "/pic" + time + "-" + j + ".jpg");
System.out.println("ok");
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 發(fā)送get請求, 下載圖片
*
* @param url 路徑
* @return
*/
public static void httpGetImg(CloseableHttpClient client, String imgUrl, String savePath) {
// 發(fā)送get請求
HttpGet request = new HttpGet(imgUrl);
// 設(shè)置請求和傳輸超時(shí)時(shí)間
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000).build();
// 設(shè)置請求頭
request.setHeader("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1");
request.setConfig(requestConfig);
try {
CloseableHttpResponse response = client.execute(request);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
FileUtils.copyInputStreamToFile(in, new File(savePath));
System.out.println("下載圖片成功:" + imgUrl);
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
request.releaseConnection();
}
}
JAr包:
<!-- apache io操作通用jar包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- httpclient 支持jar -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.5</version>
</dependency>
運(yùn)行結(jié)果:

保存到本地:

以上就是Java批量寫入文件和下載圖片的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java批量寫入和下載的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java大話之創(chuàng)建型設(shè)計(jì)模式教程示例
這篇文章主要為大家介紹了java大話之創(chuàng)建型設(shè)計(jì)模式教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
java 之JNA中的Memory和Pointer的使用方法
這篇文章主要介紹了java 之JNA中的Memory和Pointer的使用方法,文章基于Java的相關(guān)自來哦展開對Pointer和Memory的使用介紹,需要的小伙伴可以參考一下2022-04-04
Spring?Boot整合持久層之JPA多數(shù)據(jù)源
JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的標(biāo)準(zhǔn)規(guī)范,Hibernate 是持久化規(guī)范的技術(shù)實(shí)現(xiàn),而 Spring Data JPA 是在 Hibernate 基礎(chǔ)上封裝的一款框架2022-08-08
springboot表單提交之validator校驗(yàn)
在前臺表單驗(yàn)證的時(shí)候,通常會校驗(yàn)一些數(shù)據(jù)的可行性,比如是否為空,長度,身份證,郵箱等等,這篇文章主要給大家介紹了關(guān)于springboot表單提交之validator校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2021-05-05

