如何通过Java将修改后的JSONObject写回远程Linux服务器的JSON文件
解决远程SFTP服务器JSON文件修改后写回的问题
嗨,看起来你已经搞定了JSON解析和属性修改的核心部分,剩下的写回步骤其实很简单,用JSch的ChannelSftp就能轻松实现!我来给你补全代码并解释关键细节:
核心步骤说明
要把修改后的JSONObject写回远程原文件,你需要做这几件事:
- 将修改后的
JSONObject转换为标准JSON字符串 - 把字符串包装成输入流(因为SFTP的
put方法只接受输入流作为数据源) - 使用
ChannelSftp.put()方法上传到原文件路径,指定覆盖模式避免文件冲突
完整代码示例
我把你的现有代码补全,加上写回逻辑和资源关闭的最佳实践:
Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp sftp = (ChannelSftp) channel; InputStream stream = null; try { // 1. 读取远程JSON文件并解析 stream = sftp.get("<JSON FILE LOCATION>"); JSONParser jsonParser = new JSONParser(); JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(stream, "UTF-8")); // 2. 修改指定属性 System.out.println("修改前的JSON: " + jsonObject.toJSONString()); jsonObject.put("XXXX", "WWWWXYZ"); System.out.println("修改后的JSON: " + jsonObject.toJSONString()); // 3. 将修改后的JSON转换为UTF-8编码的字节流 String updatedJson = jsonObject.toJSONString(); InputStream updatedStream = new ByteArrayInputStream(updatedJson.getBytes(StandardCharsets.UTF_8)); // 4. 写回远程原文件,指定OVERWRITE模式覆盖原有文件 sftp.put(updatedStream, "<JSON FILE LOCATION>", ChannelSftp.OVERWRITE); System.out.println("JSON文件已成功更新并写回远程服务器!"); } catch (ParseException | IOException e) { e.printStackTrace(); } finally { // 5. 关闭所有资源,避免连接泄漏 try { if (stream != null) stream.close(); if (sftp != null) sftp.disconnect(); if (channel != null) channel.disconnect(); } catch (IOException e) { e.printStackTrace(); } }
关键细节解释
ChannelSftp.OVERWRITE模式:如果不指定这个参数,当远程文件已存在时,SFTP默认会抛出"文件已存在"的异常,加上这个参数就能直接覆盖原文件。- UTF-8编码:读取和写入都强制使用UTF-8,避免不同系统环境下中文或特殊字符出现乱码问题。
- 资源关闭:一定要在
finally块里关闭流和SFTP通道,防止长期占用服务器连接资源导致泄漏。
内容的提问来源于stack exchange,提问作者Vikas shitole
相关产品推荐
相关产品推荐

