1. package org.jeecg.modules.util;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStreamWriter;
  6. import java.io.Writer;
  7.  
  8. /**
  9. * @Description: TODO 创建json文件
  10. * @author:
  11. * @date: 2020年12月14日 16:01
  12. */
  13. public class CreateFileUtil {
  14.  
  15. public static boolean createJsonFile(String jsonString, String filePath, String fileName) {
  16. // 标记文件生成是否成功
  17. boolean flag = true;
  18.  
  19. // 拼接文件完整路径
  20. String fullPath = filePath + File.separator + fileName + ".json";
  21.  
  22. // 生成json格式文件
  23. try {
  24. // 保证创建一个新文件
  25. File file = new File(fullPath);
  26. if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
  27. file.getParentFile().mkdirs();
  28. }
  29. if (file.exists()) { // 如果已存在,删除旧文件
  30. file.delete();
  31. }
  32. file.createNewFile();
  33.  
  34. if (jsonString.indexOf("'") != -1) {
  35. //将单引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
  36. jsonString = jsonString.replaceAll("'", "\\'");
  37. }
  38. if (jsonString.indexOf("\"") != -1) {
  39. //将双引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
  40. jsonString = jsonString.replaceAll("\"", "\\\"");
  41. }
  42.  
  43. if (jsonString.indexOf("\r\n") != -1) {
  44. //将回车换行转换一下,因为JSON串中字符串不能出现显式的回车换行
  45. jsonString = jsonString.replaceAll("\r\n", "\\u000d\\u000a");
  46. }
  47. if (jsonString.indexOf("\n") != -1) {
  48. //将换行转换一下,因为JSON串中字符串不能出现显式的换行
  49. jsonString = jsonString.replaceAll("\n", "\\u000a");
  50. }
  51.  
  52. // 格式化json字符串
  53. jsonString = JsonFormatTool.formatJson(jsonString);
  54.  
  55. // 将格式化后的字符串写入文件
  56. Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
  57. write.write(jsonString);
  58. write.flush();
  59. write.close();
  60. } catch (Exception e) {
  61. flag = false;
  62. e.printStackTrace();
  63. }
  64.  
  65. // 返回是否成功的标记
  66. return flag;
  67. }
  68.  
  69. }
  1. package org.jeecg.modules.util;
  2.  
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.apache.commons.net.ftp.FTP;
  5. import org.apache.commons.net.ftp.FTPClient;
  6. import org.apache.commons.net.ftp.FTPFile;
  7. import org.apache.commons.net.ftp.FTPReply;
  8.  
  9. import java.io.*;
  10.  
  11. /**
  12. * @Description: TODO ftp上传下载文件
  13. * @author:
  14. * @date: 2020年12月21日 10:32
  15. */
  16. @Slf4j
  17. public class FtpUtil {
  18.  
  19. /**
  20. * Description: 向FTP服务器上传文件
  21. *
  22. * @param host FTP服务器hostname
  23. * @param port FTP服务器端口
  24. * @param username FTP登录账号
  25. * @param password FTP登录密码
  26. * @param basePath FTP服务器基础目录
  27. * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
  28. * @param filename 上传到FTP服务器上的文件名
  29. * @param input 输入流
  30. * @return 成功返回true,否则返回false
  31. */
  32. public static boolean uploadFile(String host, int port, String username, String password, String basePath,
  33. String filePath, String filename, InputStream input) {
  34. log.info("host === "+host);
  35. log.info("port === "+port);
  36. log.info("username === "+username);
  37. log.info("host === "+host);
  38. log.info("password === "+password);
  39. log.info("basePath === "+basePath);
  40. log.info("filePath === "+filePath);
  41. boolean result = false;
  42. FTPClient ftp = new FTPClient();
  43. try {
  44. int reply;
  45. ftp.connect(host, port);// 连接FTP服务器
  46. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  47. ftp.login(username, password);// 登录
  48. reply = ftp.getReplyCode();
  49. log.info("reply"+reply);
  50. if (!FTPReply.isPositiveCompletion(reply)) {
  51. ftp.disconnect();
  52. log.info("ftp服务器连接失败 111111");
  53. log.info("result === "+result);
  54. return result;
  55. }
  56. //切换到上传目录
  57. if (!ftp.changeWorkingDirectory(basePath + filePath)) {
  58. log.info("进入到上传文件分支");
  59. //如果目录不存在创建目录
  60. String[] dirs = filePath.split("/");
  61. String tempPath = basePath;
  62. for (String dir : dirs) {
  63. if (null == dir || "".equals(dir)) continue;
  64. tempPath += "/" + dir;
  65. if (!ftp.changeWorkingDirectory(tempPath)) {
  66. if (!ftp.makeDirectory(tempPath)) {
  67. return result;
  68. } else {
  69. ftp.changeWorkingDirectory(tempPath);
  70. }
  71. }
  72. }
  73. }
  74. //设置上传文件的类型为二进制类型
  75. ftp.setFileType(FTP.BINARY_FILE_TYPE);
  76. //上传文件
  77. if (!ftp.storeFile(filename, input)) {
  78. return result;
  79. }
  80. input.close();
  81. ftp.logout();
  82. result = true;
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. } finally {
  86. if (ftp.isConnected()) {
  87. try {
  88. ftp.disconnect();
  89. } catch (IOException ioe) {
  90. }
  91. }
  92. }
  93. return result;
  94. }
  95.  
  96. /**
  97. * Description: 从FTP服务器下载文件
  98. *
  99. * @param host FTP服务器hostname
  100. * @param port FTP服务器端口
  101. * @param username FTP登录账号
  102. * @param password FTP登录密码
  103. * @param remotePath FTP服务器上的相对路径
  104. * @param fileName 要下载的文件名
  105. * @param localPath 下载后保存到本地的路径
  106. * @return
  107. */
  108. public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
  109. String fileName, String localPath) {
  110. boolean result = false;
  111. FTPClient ftp = new FTPClient();
  112. try {
  113. int reply;
  114. ftp.connect(host, port);
  115. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  116. ftp.login(username, password);// 登录
  117. reply = ftp.getReplyCode();
  118. if (!FTPReply.isPositiveCompletion(reply)) {
  119. ftp.disconnect();
  120. return result;
  121. }
  122. ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
  123. FTPFile[] fs = ftp.listFiles();
  124. for (FTPFile ff : fs) {
  125. if (ff.getName().contains(fileName)) {
  126. File localFile = new File(localPath + "/" + ff.getName());
  127.  
  128. OutputStream is = new FileOutputStream(localFile);
  129. boolean flag = ftp.retrieveFile(ff.getName(), is);
  130. is.close();
  131. if (flag) {
  132. ftp.changeWorkingDirectory(remotePath);
  133. int count = ftp.dele(ff.getName());
  134. if (count > 0) {
  135. log.info("成功删除ftp服务器上文件名为" + ff.getName() + "的文件");
  136. }
  137. }
  138. }
  139. }
  140.  
  141. ftp.logout();
  142. result = true;
  143. } catch (IOException e) {
  144. e.printStackTrace();
  145. } finally {
  146. if (ftp.isConnected()) {
  147. try {
  148. ftp.disconnect();
  149. } catch (IOException ioe) {
  150. }
  151. }
  152. }
  153. return result;
  154. }
  155.  
  156. }
  1. package org.jeecg.modules.util;
  2.  
  3. /**
  4. * @Description: TODO 工具类
  5. * @author:
  6. * @date: 2020年12月14日 16:02
  7. */
  8. public class JsonFormatTool {
  9. /**
  10. * 单位缩进字符串。
  11. */
  12. private static String SPACE = " ";
  13.  
  14. /**
  15. * 返回格式化JSON字符串。
  16. *
  17. * @param json 未格式化的JSON字符串。
  18. * @return 格式化的JSON字符串。
  19. */
  20. public static String formatJson(String json) {
  21. StringBuffer result = new StringBuffer();
  22.  
  23. int length = json.length();
  24. int number = 0;
  25. char key = 0;
  26.  
  27. // 遍历输入字符串。
  28. for (int i = 0; i < length; i++) {
  29. // 1、获取当前字符。
  30. key = json.charAt(i);
  31.  
  32. // 2、如果当前字符是前方括号、前花括号做如下处理:
  33. if ((key == '[') || (key == '{')) {
  34. // (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
  35. if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
  36. result.append('\n');
  37. result.append(indent(number));
  38. }
  39.  
  40. // (2)打印:当前字符。
  41. result.append(key);
  42.  
  43. // (3)前方括号、前花括号,的后面必须换行。打印:换行。
  44. result.append('\n');
  45.  
  46. // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
  47. number++;
  48. result.append(indent(number));
  49.  
  50. // (5)进行下一次循环。
  51. continue;
  52. }
  53.  
  54. // 3、如果当前字符是后方括号、后花括号做如下处理:
  55. if ((key == ']') || (key == '}')) {
  56. // (1)后方括号、后花括号,的前面必须换行。打印:换行。
  57. result.append('\n');
  58.  
  59. // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
  60. number--;
  61. result.append(indent(number));
  62.  
  63. // (3)打印:当前字符。
  64. result.append(key);
  65.  
  66. // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
  67. if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
  68. result.append('\n');
  69. }
  70.  
  71. // (5)继续下一次循环。
  72. continue;
  73. }
  74.  
  75. // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
  76. /*if ((key == ',')) {
  77. result.append(key);
  78. result.append('\n');
  79. result.append(indent(number));
  80. continue;
  81. }*/
  82.  
  83. // 5、打印:当前字符。
  84. result.append(key);
  85. }
  86.  
  87. return result.toString();
  88. }
  89.  
  90. /**
  91. * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。
  92. *
  93. * @param number 缩进次数。
  94. * @return 指定缩进次数的字符串。
  95. */
  96. private static String indent(int number) {
  97. StringBuffer result = new StringBuffer();
  98. for (int i = 0; i < number; i++) {
  99. result.append(SPACE);
  100. }
  101. return result.toString();
  102. }
  103.  
  104. }

创建json文件上传下载ftp的更多相关文章

  1. 【FTP】FTP文件上传下载-支持断点续传

    Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...

  2. 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  3. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  4. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  5. 专题十一:实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  6. SpringMVC——返回JSON数据&&文件上传下载

    --------------------------------------------返回JSON数据------------------------------------------------ ...

  7. ftp文件上传下载命令

    介绍:从本地以用户wasqry登录的机器1*.1**.21.67上通过ftp远程登录到ftp服务器上,登录用户名是lte****,以下为使用该连接做的实验.  查看远程ftp服务器上用户lte**** ...

  8. JAVA中使用FTPClient实现文件上传下载实例代码

    一.上传文件 原理就不介绍了,大家直接看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  9. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  10. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

随机推荐

  1. Transformers包使用记录

    Transformers是著名的深度学习预训练模型集成库,包含NLP模型最多,CV等其他领域也有,支持预训练模型的快速使用和魔改,并且模型可以快速在不同的深度学习框架间(Pytorch/Tensorf ...

  2. VAE变分自编码器Keras实现

    变分自编码器(variational autoencoder, VAE)是一种生成模型,训练模型分为编码器和解码器两部分. 编码器将输入样本映射为某个低维分布,这个低维分布通常是不同维度之间相互独立的 ...

  3. Spring源码学习 ------ IoC——AOP

    一直想抽空把Spring源码拿来读读,但真正去做这件事的时候发现不简单,Spring发展这么多年,它的规模已不是一个一般的开源框架所能比的,它的主要架构和流程不是非常清晰,很难抓到要害,但有一点可以肯 ...

  4. KnowledgeManagement

    知识管理建议 总则 总参 从无知到有知 资料收集的习惯 发表是最好的记忆 Wiki 使用 建议: Blog 写作 Discuss 搜索技巧 回复:Yibie的知识管理流程与工具选择 一.个人知识管理的 ...

  5. python之environs

    下面推荐一个 environs 库,利用它我们可以轻松地设置各种类型的环境变量. 安装: pip3 install environs 好,安装之后,我们再来体验一下使用 environs 来设置环境变 ...

  6. HTML5 网络监听,全屏

    1.网络状态监听 online事件:网络重新连通时触发 offline事件:网络断开时触发 <script> // 监听网络连接 window.addEventListener(" ...

  7. 前后端数据传递之form-data

    前情 最近在项目开发中,跟服务端连调发现接口一直报错,服务端一直提示是数据没有传,而通过浏览器控制台发现数据是有传的. 坑 服务通过postman自测是OK的.经过和服务端一起定位发现服务端只接收以f ...

  8. Flutter之GetX之国际化

    Flutter之GetX之国际化 在GetMaterialApp中设置 GetMaterialApp( locale: Get.deviceLocale, translations: Messages ...

  9. tar/zip命令加密压缩

    回到顶部 场景 Centos6下使用加密压缩,可以从A机器到B机器解压. 可用在kali上解压就不行. 回到顶部 命令 解包 tar zxvf FileName.tar 打包 tar czvf Fil ...

  10. Qt音视频开发04-保存音频文件(pcm/wav/aac)

    一.前言 音频的保存相对来说比视频的要简单,具有通用性,不需要经过ffmpeg的编码,ffmpeg解码出来后一般会转换成pcm原始的数据用来播放,所以对数据直接写文件即可,但是这种格式是无法用播放器直 ...