• Java通过FTP服务器上传下载文件的方法


    工具类:

    package com.favccxx.favsoft.util;
      
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
      
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
      
    public class FavFTPUtil {
        
      /**
       * 上传文件(可供Action/Controller层使用)
       * @param hostname FTP服务器地址
       * @param port  FTP服务器端口号
       * @param username  FTP登录帐号
       * @param password  FTP登录密码
       * @param pathname  FTP服务器保存目录
       * @param fileName  上传到FTP服务器后的文件名称
       * @param inputStream 输入文件流
       * @return
       */
      public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
        boolean flag = false;
        FTPClient ftpClient = new FTPClient();
        ftpClient.setControlEncoding("UTF-8");
        try {
          //连接FTP服务器
          ftpClient.connect(hostname, port);
          //登录FTP服务器
          ftpClient.login(username, password);
          //是否成功登录FTP服务器
          int replyCode = ftpClient.getReplyCode();
          if(!FTPReply.isPositiveCompletion(replyCode)){
            return flag;
          }
            
          ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
          ftpClient.makeDirectory(pathname);
          ftpClient.changeWorkingDirectory(pathname);
          ftpClient.storeFile(fileName, inputStream);
          inputStream.close();
          ftpClient.logout();
          flag = true;
        } catch (Exception e) {
          e.printStackTrace();
        } finally{
          if(ftpClient.isConnected()){
            try {
              ftpClient.disconnect();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
        return flag;
      }
        
        
      /**
       * 上传文件(可对文件进行重命名)
       * @param hostname FTP服务器地址
       * @param port  FTP服务器端口号
       * @param username  FTP登录帐号
       * @param password  FTP登录密码
       * @param pathname  FTP服务器保存目录
       * @param filename  上传到FTP服务器后的文件名称
       * @param originfilename 待上传文件的名称(绝对地址)
       * @return
       */
      public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
        boolean flag = false;
        try {
          InputStream inputStream = new FileInputStream(new File(originfilename));
          flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
        } catch (Exception e) {
          e.printStackTrace();
        }
        return flag;
      }
        
      /**
       * 上传文件(不可以进行文件的重命名操作)
       * @param hostname FTP服务器地址
       * @param port  FTP服务器端口号
       * @param username  FTP登录帐号
       * @param password  FTP登录密码
       * @param pathname  FTP服务器保存目录
       * @param originfilename 待上传文件的名称(绝对地址)
       * @return
       */
      public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
        boolean flag = false;
        try {
          String fileName = new File(originfilename).getName();
          InputStream inputStream = new FileInputStream(new File(originfilename));
          flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
        } catch (Exception e) {
          e.printStackTrace();
        }
        return flag;
      }
        
        
      /**
       * 删除文件
       * @param hostname FTP服务器地址
       * @param port  FTP服务器端口号
       * @param username  FTP登录帐号
       * @param password  FTP登录密码
       * @param pathname  FTP服务器保存目录
       * @param filename  要删除的文件名称
       * @return
       */
      public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){
        boolean flag = false;
        FTPClient ftpClient = new FTPClient();
        try {
          //连接FTP服务器
          ftpClient.connect(hostname, port);
          //登录FTP服务器
          ftpClient.login(username, password);
          //验证FTP服务器是否登录成功
          int replyCode = ftpClient.getReplyCode();
          if(!FTPReply.isPositiveCompletion(replyCode)){
            return flag;
          }
          //切换FTP目录
          ftpClient.changeWorkingDirectory(pathname);
          ftpClient.dele(filename);
          ftpClient.logout();
          flag = true;
        } catch (Exception e) {
          e.printStackTrace();
        } finally{
          if(ftpClient.isConnected()){
            try {
              ftpClient.logout();
            } catch (IOException e) {
              
            }
          }
        }
        return flag;
      }
        
      /**
       * 下载文件
       * @param hostname FTP服务器地址
       * @param port  FTP服务器端口号
       * @param username  FTP登录帐号
       * @param password  FTP登录密码
       * @param pathname  FTP服务器文件目录
       * @param filename  文件名称
       * @param localpath 下载后的文件路径
       * @return
       */
      public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
        boolean flag = false;
        FTPClient ftpClient = new FTPClient();
        try {
          //连接FTP服务器
          ftpClient.connect(hostname, port);
          //登录FTP服务器
          ftpClient.login(username, password);
          //验证FTP服务器是否登录成功
          int replyCode = ftpClient.getReplyCode();
          if(!FTPReply.isPositiveCompletion(replyCode)){
            return flag;
          }
          //切换FTP目录
          ftpClient.changeWorkingDirectory(pathname);
          FTPFile[] ftpFiles = ftpClient.listFiles();
          for(FTPFile file : ftpFiles){
            if(filename.equalsIgnoreCase(file.getName())){
              File localFile = new File(localpath + "/" + file.getName());
              OutputStream os = new FileOutputStream(localFile);
              ftpClient.retrieveFile(file.getName(), os);
              os.close();
            }
          }
          ftpClient.logout();
          flag = true;
        } catch (Exception e) {
          e.printStackTrace();
        } finally{
          if(ftpClient.isConnected()){
            try {
              ftpClient.logout();
            } catch (IOException e) {
              
            }
          }
        }
        return flag;
      }
      
    }

    测试类:

    package com.favccxx.favsoft.util;
      
    import junit.framework.TestCase;
      
    public class FavFTPTest extends TestCase {
        
      public void testFavFTPUtil(){
        String hostname = "127.0.0.1";
        int port = 21;
        String username = "business";
        String password = "business";
        String pathname = "business/ebook"; 
        String filename = "big.rar"; 
        String originfilename = "C:\Users\Downloads\Downloads.rar";
        FavFTPUtil.uploadFileFromProduction(hostname, port, username, password, pathname, filename, originfilename);
    //   String localpath = "D:/";
          
    //   FavFTPUtil.downloadFile(hostname, port, username, password, pathname, filename, localpath);
      }
      
    }
  • 相关阅读:
    Visual C#动态生成控件
    (转)GridView 72般绝技
    ASP.NET给DataGrid,Repeater等添加全选批量删除等功能(转)
    JS操作字符串
    在IE中调试客户端脚
    一组很棒的button样式 (转)
    c#实现随机字符串(不包含数字)
    1996年4月全国计算机等级考试二级C语言笔试试题
    ASP.NET 2.0站点登录、导航与权限管理 转
    1996年9月全国计算机等级考试二级C语言笔试试题
  • 原文地址:https://www.cnblogs.com/SunAutumn/p/7513549.html
Copyright © 2020-2023  润新知