在日常开发中,我们经常需要更新一些碎碎念式的记录,比如灵感、心情、短文等。手动编辑 JSON 文件并上传到服务器,不仅繁琐,还容易出错。为了解决这些问题,我编写了一个简洁的 Java 程序,用于自动化管理碎碎念内容。本文将从需求背景开始,逐步讲解实现过程。


背景与需求

1. 自动化更新碎碎念

碎碎念需要频繁更新,传统方法需要以下步骤:

  • 手动获取现有数据;
  • 添加新内容并维护字段;
  • 将更新后的 JSON 数据上传至服务器。

为此,我希望编写一个程序,能够:

  • 从服务器获取当前碎碎念数据;
  • 支持用户动态输入新内容并附加图片;
  • 自动生成和更新 JSON 数据结构。

代码实现

1. 获取现有碎碎念内容

首先,我们通过 OkHttpClient 从指定的 API 获取碎碎念数据,并使用 fastjson 解析 JSON 数据。以下是实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static String SUISUINIAN_URL = "xxx";

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(SUISUINIAN_URL)
.build();

Response suisuinian = client.newCall(request).execute();
if (suisuinian.isSuccessful() && suisuinian.body() != null) {
String suisuinianBody = suisuinian.body().string();
JSONArray jsonArray = JSON.parseArray(suisuinianBody);

List<Map<String, Object>> articles = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject articleNode = jsonArray.getJSONObject(i);
Map<String, Object> article = new HashMap<>();
article.put("date", articleNode.getString("date"));
article.put("key", articleNode.getString("key"));
article.put("content", articleNode.getString("content"));
articles.add(article);
}
}

功能:

  • 通过 API 获取当前碎碎念数据;
  • 使用 fastjson 将 JSON 数据解析为 Java 对象列表,便于后续操作。

2. 动态输入新内容

支持用户从终端输入新的碎碎念内容,并附加多张图片。这部分代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
String finalContent = "";
while (finalContent.isEmpty()) {
System.out.print("请输入文章内容(输入 'exit' 结束):\n");
StringBuilder contentBuilder = new StringBuilder();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if ("exit".equalsIgnoreCase(line.trim())) break;
contentBuilder.append(line).append("\n");
}
finalContent = contentBuilder.toString().trim();
if (finalContent.isEmpty()) System.out.println("输入的文章内容不能为空,请重新输入。\n");
}
System.out.println("您输入的文章内容是:\n" + finalContent);

如果需要添加图片,可以进一步增强内容,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
System.out.print("是否需要为文章添加图片?(输入 'y' 或 'n'): ");
String addImage = scanner.nextLine().trim();
if ("y".equalsIgnoreCase(addImage)) {
System.out.println("请输入图片地址(输入 'exit' 结束):");
StringBuilder imageHtmlBuilder = new StringBuilder();
while (scanner.hasNextLine()) {
String imageUrl = scanner.nextLine().trim();
if ("exit".equalsIgnoreCase(imageUrl)) break;
if (!imageUrl.isEmpty()) {
imageHtmlBuilder.append("<br><img src=\"")
.append(imageUrl)
.append("\" alt=\"文章图片\">");
}
}
finalContent += imageHtmlBuilder.toString();
}

功能:

  • 用户可多次输入内容,直到满意为止;
  • 支持附加多张图片,生成 HTML 图片标签。

3. 生成新数据并上传

程序会根据用户输入生成新的碎碎念数据,并通过 POST 请求上传到服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static String initNewJson(String newKey, String finalContent, List<String> tagList, List<Map<String, Object>> articles) {
Map<String, Object> newArticle = new HashMap<>();
newArticle.put("date", SDF.format(new Date()));
newArticle.put("key", newKey);
newArticle.put("content", finalContent);
if (!tagList.isEmpty()) {
newArticle.put("tags", tagList);
}
articles.add(newArticle);

Map<String, String> map = new HashMap<>();
map.put("orgi_url", JSON.toJSONString(articles));
map.put("short_code", "suisuinian.json");
map.put("type", "text");
return JSON.toJSONString(map);
}

URLConnection conn = initConn();
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
out.write(param);
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

功能:

  • 自动生成带时间戳的新数据;
  • 自动组装 POST 请求参数并发送到服务器。

总结

通过这段代码,我们实现了一个自动化的碎碎念管理工具,优化了以下问题:

  1. 减少了手动操作的繁琐步骤;
  2. 支持灵活输入新内容和动态附加图片;
  3. 自动维护关键字段,避免人为错误。