前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

源代码大部分是网上找的,查来查去,找到几个可以用的例子,改来改去,揉合成现在这个样子。

一、 jar包准备(web service 的jar  不需要)

二、配置文件:

配置文件内容:

ftpUserName=hn_name
ftpPassword=hn_pwd
ftpHost=10.3.4.222
ftpPort=21
ftpPath=/home/hn_dhmp
writeTempFielPath=D\:\\ftpDownLoad

三、 ftp 工具类:

<strong>package ftp;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;/*** ftp 上传、下载工具类* @author JiangYu*/
public class FtpUtil {  private static Logger logger = Logger.getLogger(FtpUtil.class);  /** * 获取FTPClient对象 * @param ftpHost FTP主机服务器 * @param ftpPassword FTP 登录密码 * @param ftpUserName FTP登录用户名 * @param ftpPort FTP端口 默认为21 * @return */  public static FTPClient getFTPClient(String ftpHost, String ftpPassword,  String ftpUserName, int ftpPort) {  FTPClient ftpClient = null;  try {  ftpClient = new FTPClient();  ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器  ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器  if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  logger.info("未连接到FTP,用户名或密码错误 !");  ftpClient.disconnect();  } else {  logger.info("FTP连接成功。");  }  } catch (SocketException e) {  e.printStackTrace();  logger.info("请检查FTP的IP地址 ! ");  } catch (IOException e) {  e.printStackTrace();  logger.info("请核对FTP的端口 ! ");  }  return ftpClient;  }  /*** 上传本地文件到FTP服务器   * @param ftpPath 服务器上存放文件的路径* @param ftpUserName ftp服务账号* @param ftpPassword ftp服务密码* @param ftpHost ftp服务ip* @param ftpPort ftp服务端口* @param fileContent 文件内容* @param writeTempFielPath 文件在本地的路径*/public static String upload(String ftpPath, String ftpUserName, String ftpPassword,  String ftpHost, int ftpPort, String fileContent, String writeTempFielPath) {  FTPClient ftpClient = null;  String uploadResult = "";try {  ftpClient = getFTPClient(ftpHost, ftpPassword,  ftpUserName, ftpPort);  // 设置PassiveMode传输  ftpClient.enterLocalPassiveMode();  // 设置以二进制流的方式传输  ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  // 对远程目录的处理  String remoteFileName = ftpPath;  if (ftpPath.contains("/")) {  remoteFileName = ftpPath  .substring(ftpPath.lastIndexOf("/") + 1);  }  // 先把文件写出到本地,再上传到FTP上,最后再删除 。String result = write(remoteFileName, fileContent,  writeTempFielPath);  if (result.contains("成功")) {  File f = new File(writeTempFielPath + "/" + remoteFileName);  InputStream in = new FileInputStream(f);  ftpClient.storeFile(remoteFileName, in);  in.close();  uploadResult = "文件" + remoteFileName + "上传成功!";f.delete(); // 删除本地临时文件} else {  uploadResult =  "文件" + remoteFileName + "上传失败!";}  return uploadResult;} catch (Exception e) {  e.printStackTrace();  return uploadResult+"错误源: "+e.getMessage();}finally{  try {  ftpClient.disconnect();  } catch (IOException e) {  e.printStackTrace();  }  }  }  /*** 文件写出到本地* @param fileName 文件名* @param fileContext 文件内容* @param writeTempFielPath 本地存储路径* @return*/public static String write(String fileName, String fileContext,  String writeTempFielPath) {  String result = "写出成功 !";try {  File f = new File(writeTempFielPath + "/" + fileName);  if(!f.exists()){  if(!f.createNewFile()){  result = "文件不存在,创建失败 !";}  }  BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));  bw.write(fileContext.replaceAll("\n", "\r\n"));  bw.flush();  bw.close();  return result;  } catch (Exception e) {  result = "写出失败 !";e.printStackTrace();  return result;  }  }  /** * 从FTP服务器下载文件 * @param ftpHost FTP服务器IP * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param remotePath FTP服务器上的相对路径 * @param fileName 要下载的文件名 * @param localPath 下载后保存到本地的路径 * @return */public static String downFile(String ftpHost, int port,String username, String password,String remotePath,String fileName,String localPath) { String result = "下载失败 !"; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(ftpHost, port); ftp.login(username, password); // 登录 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return "服务连接失败 !"; } ftp.changeWorkingDirectory(remotePath); // 转移到FTP服务器目录 FTPFile[] fs = ftp.listFiles(); boolean flag = false; // 下载文件不存在for(FTPFile ff:fs){ if(ff.getName().equals(fileName)){ File localFile = new File(localPath+"/"+ff.getName()); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); is.close(); flag = true;} }ftp.logout(); if(!flag){result = "文件: "+fileName+"不存在 !"; }else{result = "下载成功 !"; }} catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) {} } } return result; }}  </strong>

upload方法可以用这个方法代替,直接上传整个文件,而不作用把文件内容作为参数,此方法主体代码来自网络:

package ftp;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;import org.apache.commons.net.ftp.FTPClient;
/*** 文件上传替换方法 **/
public class FtpUpToo {private static FTPClient ftpClient = null;  /** * ftp上传文件* @param targetFname 生成目标文件 * @return true||false */  public static boolean uploadFile(String targetFname){  int ftpPort = 0;  String ftpUserName = "";  // ftp服务账号String ftpPassword = "";  // ftp服务密码String ftpHost = "";  // ftp服务ipString ftpPath = "";  // ftp服务器上存放文件的路径String writeTempFielPath = "";  // 文件在本地的路径String proName = "ftp.properties"; // 配置文件名try {// 配置文件一定要和本类放在同一包下才能找到 InputStream in = FtpUtil.class.getClassLoader().getResourceAsStream(proName);  if (in == null) {  throw new Exception("配置文件"+proName+"读取失败 !");} Properties properties = new Properties();  properties.load(in);  ftpUserName = properties.getProperty("ftpUserName");  ftpPassword = properties.getProperty("ftpPassword");  ftpHost = properties.getProperty("ftpHost");  ftpPort = Integer.valueOf(properties.getProperty("ftpPort"))  .intValue();  ftpPath = properties.getProperty("ftpPath");  writeTempFielPath = properties.getProperty("writeTempFielPath"); } catch (Exception e) {e.printStackTrace();}    boolean flag = false;  ftpClient = FtpUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort); if( ftpClient!=null ){  File srcFile = new File(writeTempFielPath+"/JiangYuUp.csv");   FileInputStream fis = null;  try {  fis  = new FileInputStream(srcFile);  //设置上传目录   ftpClient.changeWorkingDirectory(ftpPath);  ftpClient.setBufferSize(1024);   ftpClient.setControlEncoding("GBK");   //设置文件类型(二进制)   ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  //上传  flag = ftpClient.storeFile(targetFname, fis);   } catch (Exception e) {  e.printStackTrace();  closeCon();  }finally{  try {fis.close();System.out.println("运行结束!----");} catch (IOException e) {e.printStackTrace();}}  }  return flag;  }/** * 销毁ftp连接*/  public static void closeCon(){  if(ftpClient !=null){  if(ftpClient.isConnected()){  try {  ftpClient.logout();  ftpClient.disconnect();  } catch (IOException e) {  e.printStackTrace();  }   }  }  }  }

四、测试类:

<strong>package ftp;import java.io.InputStream;
import java.util.Properties;public class FtpTest {  public static void main(String[] args) {  new FtpTest().test();}  private void test(){int ftpPort = 0;  String ftpUserName = "";  // ftp服务账号String ftpPassword = "";  // ftp服务密码String ftpHost = "";  // ftp服务ipString ftpPath = "";  // ftp服务器上存放文件的路径String writeTempFielPath = "";  // 文件在本地的路径String proName = "ftp.properties"; // 配置文件名try {  // 配置文件一定要和本类放在同一包下才能找到 InputStream in = FtpUtil.class.getClassLoader().getResourceAsStream(proName);  if (in == null) {  throw new Exception("配置文件"+proName+"读取失败 !");} Properties properties = new Properties();  properties.load(in);  ftpUserName = properties.getProperty("ftpUserName");  ftpPassword = properties.getProperty("ftpPassword");  ftpHost = properties.getProperty("ftpHost");  ftpPort = Integer.valueOf(properties.getProperty("ftpPort"))  .intValue();  ftpPath = properties.getProperty("ftpPath");  writeTempFielPath = properties.getProperty("writeTempFielPath");  // 下载String result = FtpUtil.downFile(ftpHost, ftpPort, ftpUserName, ftpPassword,ftpPath, "JiangYu.csv", writeTempFielPath);  // JiangYu.csv:下载文件的名称System.out.println("文件下载结果为:" + result);  // 上传ftpPath = ftpPath + "/" + "JiangYu.csv";  // JiangYu.csv:上传文件的名称FtpUtil.upload(ftpPath, ftpUserName, ftpPassword, ftpHost, ftpPort, "这里是文件内容", writeTempFielPath);  } catch (Exception e) {  e.printStackTrace();  }  }
}  </strong>

注:  测试类运行后下载成功的文件 和 上传时的临时文件是一样的名字,会被上传成功后删除临时文件操作所删除。

 建议上传和下载分开测试。

五、 上传、下载结果:

java 中 FtpClient 实现 FTP 文件上传、下载相关推荐

  1. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  2. C++:FTP文件上传下载(附完整源码)

    C++:FTP文件上传下载 FTP文件下载 FTP文件上传 FTP文件下载 #include #include #include #pragma comment(lib, "WinInet. ...

  3. Java中阿里云OSS文件上传工具类

    阿里云OSS文件上传下载工具类 前言: 本质上就是获取配置文件信息,然后注入bean,调用sdk中提供的增删改方法: 为了避免同名文件会替换,用了hutool中唯一id生成+文件名做拼接 导入依赖:→ ...

  4. java ftp下载文件 慢_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...

    标签: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,Str ...

  5. java ftp 中文上传_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...

    //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String ...

  6. Android局域网实现FTP文件上传下载客户端与服务端

    文章目录 前言 一.FTP是什么? 二.使用步骤 1 服务端 1.1 服务端的代码实现 2 客户端 2.1 客户端的代码实现 附件 前言 最近在公司的项目中,使用到了 局域网通信,不同的设备直接传递消 ...

  7. Transmit 5.5.1 for Mac 中文共享版 – 优秀的FTP文件上传下载客户端

    下载地址:风云社区 macOS文件传输应用程序的黄金标准刚刚推向未来.Transmit 5.5.1 在这里.使用简单,熟悉且功能强大的UI上传,下载和管理大量服务器上的文件. 更多服务器: Trans ...

  8. ftp文件上传下载等系列操作

    一.安装tfp ubuntu系统: apt-get install ftp 二.ftp连接 访问ftp server: ftp 192.168.120.xxx 输入用户名密码即可 admin/xxxx ...

  9. .Net FTP文件上传下载及相关文件操作

    public class FtpHelper{string ftpServerIP;string ftpRemotePath;string ftpUserID;string ftpPassword;s ...

最新文章

  1. c++框架有哪些_Java Mybatis框架入门教程_v20200726
  2. R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms )构建回归模型、通过method参数指定算法名称
  3. 临时表temporary table
  4. python温度转换程序_用Python程序温度转换实例
  5. 如何用 Blazor 实现 Ant Design 组件库?
  6. 【codevs1281】Xn数列,矩阵乘法练习
  7. 郭明錤:华为可能在10月开始出货鸿蒙手机
  8. linux系统如何创建python文件_Linux搭建python环境详解
  9. css displayhidden
  10. IT人的爱情生活散记
  11. 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
  12. Apache Flink 1.9重磅发布!首次合并阿里内部版本Blink重要功能
  13. Python 机器学习经典实例
  14. Truecrypt之死
  15. oracle .net 中文,C# 连接Oracle 中文乱码问题解决办法
  16. 联想电脑关闭HotKey (热键模式),使用快捷功能时才需按Fn
  17. android 自定义locale,Android Locale填坑
  18. AxureRP(中英文版)——初识Axure(一)
  19. Java实现图片合成
  20. 跳板机/堡垒机并不安全

热门文章

  1. 【POJ - 1741】Tree(树分治,容斥,点分治,模板题)
  2. 【2018ACM山东省赛 - B】Bullet(二分 + 二分图匹配,匈牙利算法,卡常)
  3. 【计蒜客 - 蓝桥训练】炮台实验(数学期望,期望dp)
  4. 【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)
  5. Idea Spring Boot配置文件.yaml或.properties不能自动提示的有效解决办法
  6. seo vue 动态路由_基于vue.jsvue-router的动态更新TDK(SEO优化)
  7. win10安装ensp启动40_装系统不求人,快速制作启动U盘,傻瓜式重装WIN10
  8. unsigned int mysql_mysql 中int类型字段unsigned和signed的探索
  9. c++经典编程题_【经典C语言知识】C/C++编程难点总结
  10. android nougat和安卓7.1,Android Nougat 7.1.2 先睹为快