在日常开发中,我们经常需要更新一些碎碎念式的记录,比如灵感、心情、短文等。手动编辑 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 请求参数并发送到服务器。
总结
通过这段代码,我们实现了一个自动化的碎碎念管理工具,优化了以下问题:
- 减少了手动操作的繁琐步骤;
- 支持灵活输入新内容和动态附加图片;
- 自动维护关键字段,避免人为错误。