FtpUtil.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package com.uas.util;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.net.SocketException;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Properties;
  13. import com.jcraft.jsch.JSchException;
  14. import org.apache.commons.net.ftp.FTP;
  15. import org.apache.commons.net.ftp.FTPClient;
  16. import org.apache.commons.net.ftp.FTPFile;
  17. import org.apache.commons.net.ftp.FTPReply;
  18. public class FtpUtil {
  19. /**
  20. * 连接到ftp站点,判断是否可以连接
  21. * @param path 要连接到的目录
  22. * @param addr 站点地址
  23. * @param port 端口
  24. * @param username 用户名
  25. * @param password 密码
  26. * @return
  27. * @throws Exception
  28. */
  29. public static boolean connect(String path, String addr, int port, String username,
  30. String password) {
  31. boolean result = false;
  32. try {
  33. FTPClient ftp = new FTPClient();
  34. int reply;
  35. ftp.connect(addr, port);
  36. ftp.login(username, password);
  37. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  38. reply = ftp.getReplyCode();
  39. if (!FTPReply.isPositiveCompletion(reply)) {
  40. ftp.disconnect();
  41. return result;
  42. }
  43. ftp.changeWorkingDirectory(path);
  44. result = true;
  45. return result;
  46. }catch (Exception e){
  47. SFTPUtil sftp = new SFTPUtil(username, password, addr, port);
  48. try {
  49. sftp.login();
  50. result = true;
  51. } catch (JSchException e1) {
  52. e1.printStackTrace();
  53. }
  54. return result;
  55. }
  56. }
  57. /**
  58. * 获取ftp连接,该连接指向ftp配置中的downloadpath文件夹
  59. * @param map 包含ftp连接配置的map
  60. */
  61. public static FTPClient connect(Map<String,Object> map) throws Exception {
  62. return connect(map,map.get("downloadpath").toString());
  63. }
  64. /**
  65. * 获取ftp连接,该连接指向ftp配置中的downloadpath文件夹
  66. * @param map 包含ftp连接配置的map
  67. */
  68. public static FTPClient connect(Map<String,Object> map,String path){
  69. FTPClient ftp = null;
  70. String addr = null;
  71. try{
  72. addr = map.get("ip").toString();
  73. int port = Integer.parseInt(map.get("port").toString());
  74. String username = map.get("user").toString();
  75. String password = map.get("password").toString();
  76. ftp = new FTPClient();
  77. int reply;
  78. ftp.connect(addr, port);
  79. if(!ftp.login(username, password)){
  80. return null;
  81. }
  82. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  83. reply = ftp.getReplyCode();
  84. if (!FTPReply.isPositiveCompletion(reply)) {
  85. ftp.disconnect();
  86. return null;
  87. }
  88. ftp.changeWorkingDirectory(path);
  89. return ftp;
  90. }catch(Exception e){
  91. e.printStackTrace();
  92. BaseUtil.getLogger().error("ip:" + addr + e.toString());
  93. return null;
  94. }
  95. }
  96. /**
  97. * 上传文件
  98. * @param ftpClient 已连接的ftp客户端
  99. * @param pathname 路径
  100. * @param file 待上传的文件
  101. * @return 上传结果
  102. */
  103. public static boolean uploadFile(FTPClient ftpClient, String pathname, File file,String name) {
  104. boolean flag = false;
  105. ftpClient.setControlEncoding("UTF-8");
  106. try {
  107. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
  108. boolean change = ftpClient.changeWorkingDirectory(pathname+"/");
  109. if(!change){
  110. BaseUtil.getLogger().info("change to " + pathname + " fail");
  111. return false;
  112. }
  113. InputStream inputStream = new FileInputStream(file);
  114. ftpClient.enterLocalPassiveMode();
  115. ftpClient.storeFile(name, inputStream);
  116. inputStream.close();
  117. //ftpClient.logout();
  118. flag = true;
  119. } catch (Exception e) {
  120. e.printStackTrace();
  121. BaseUtil.getLogger().error(e.toString());
  122. if (ftpClient.isConnected()) {
  123. try {
  124. ftpClient.disconnect();
  125. } catch (IOException e1) {
  126. BaseUtil.getLogger().error(e1.toString());
  127. e1.printStackTrace();
  128. }
  129. }
  130. }
  131. return flag;
  132. }
  133. /**
  134. * 删除后关闭ftp连接
  135. * @param ftpClient
  136. * @param filename 要删除的文件名
  137. * @return 删除结果
  138. */
  139. public static boolean deleteFile(FTPClient ftpClient,String filename) {
  140. boolean flag = false;
  141. try {
  142. ftpClient.dele(filename);
  143. flag = true;
  144. } catch (Exception e) {
  145. BaseUtil.getLogger().error(e.toString());
  146. e.printStackTrace();
  147. }
  148. return flag;
  149. }
  150. /**
  151. *
  152. * @param ftpClient
  153. * fileType 需要下载的文件类型
  154. * @return 获取连接到的ftp站点下的文件夹所有文件
  155. */
  156. public static List<File> downloadAllFileByType(FTPClient ftpClient,String fileType) {
  157. List<File> files = new ArrayList<File>();
  158. try {
  159. ftpClient.enterLocalPassiveMode();
  160. FTPFile[] ftpFiles = ftpClient.listFiles();
  161. for (FTPFile file : ftpFiles) {
  162. if(file.getName().toUpperCase().endsWith("." + fileType)){
  163. File localFile = new File(System.getProperty("java.io.tmpdir") + File.separator + file.getName());
  164. OutputStream os = new FileOutputStream(localFile);
  165. ftpClient.retrieveFile(file.getName(), os);
  166. os.close();
  167. files.add(localFile);
  168. }
  169. }
  170. } catch (Exception e) {
  171. BaseUtil.getLogger().error(e.toString());
  172. e.printStackTrace();
  173. }
  174. return files;
  175. }
  176. /**
  177. * 关闭ftp连接
  178. * @param ftpClient
  179. */
  180. public static void closeFtpClient(FTPClient ftpClient){
  181. if (ftpClient.isConnected()) {
  182. try {
  183. ftpClient.logout();
  184. } catch (IOException e) {
  185. BaseUtil.getLogger().error(e.toString());
  186. }
  187. }
  188. }
  189. }