从ftp上传下载文件(二)

ftp工具类,供文章(一)中类调用

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 java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpKit {
 
 public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) { 
     boolean success = false; 
     FTPClient ftp = new FTPClient(); 
     try { 
         int reply; 
         ftp.setConnectTimeout(2000);
         ftp.connect(url, port);//连接FTP服务器  
         //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
         ftp.login(username, password);//登录 
         ftp.setBufferSize(1024);
         ftp.setControlEncoding("UTF-8");
         ftp.setFileType(FTP.BINARY_FILE_TYPE);
         ftp.enterLocalActiveMode();
         ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
         reply = ftp.getReplyCode(); 
         if (!FTPReply.isPositiveCompletion(reply)) { 
             ftp.disconnect(); 
             return success; 
         } 
         ftp.changeWorkingDirectory(path); 
         success=ftp.storeFile(filename, input);          
         ftp.logout(); 
     } catch (IOException e) { 
         e.printStackTrace(); 
     } finally { 
         if (ftp.isConnected()) { 
             try { 
                 ftp.disconnect(); 
             } catch (IOException ioe) { 
             } 
         }
     } 
     return success; 
 }
 
 private FTPClient ftpClient; 
    public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE; 
    public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE; 
     
    /**
     * 利用FtpConfig进行服务器连接
     * @param ftpConfig 参数配置Bean类
     * @throws SocketException
     * @throws IOException
     */
    public void connectServer(FtpConfig ftpConfig) throws SocketException, 
            IOException { 
        String server = ftpConfig.getServer(); 
        int port = ftpConfig.getPort(); 
        String user = ftpConfig.getUsername(); 
        String password = ftpConfig.getPassword(); 
        String location = ftpConfig.getLocation(); 
        connectServer(server, port, user, password, location); 
    } 
     
    /**
     * 使用详细信息进行服务器连接
     * @param server:服务器地址名称
     * @param port:端口号
     * @param user:用户名
     * @param password:用户密码
     * @param path:转移到FTP服务器目录
     * @throws SocketException
     * @throws IOException
     */
    public void connectServer(String server, int port, String user, 
            String password, String path) throws SocketException, IOException { 
        ftpClient = new FTPClient(); 
        ftpClient.connect(server, port); 
        System.out.println("Connected to " + server + "."); 
        //连接成功后的回应码
        System.out.println(ftpClient.getReplyCode()); 
        ftpClient.login(user, password); 
        if (path!=null&&path.length() != 0) { 
            ftpClient.changeWorkingDirectory(path); 
        } 
     ftpClient.setBufferSize(1024);//设置上传缓存大小
     ftpClient.setControlEncoding("UTF-8");//设置编码
     ftpClient.setFileType(BINARY_FILE_TYPE);//设置文件类型
    } 
   
    /**
     * 设置传输文件类型:FTP.BINARY_FILE_TYPE | FTP.ASCII_FILE_TYPE 
     * 二进制文件或文本文件
     * @param fileType
     * @throws IOException
     */
    public void setFileType(int fileType) throws IOException { 
        ftpClient.setFileType(fileType); 
    } 
 
    /**
     * 关闭连接
     * @throws IOException
     */
    public void closeServer() throws IOException { 
        if (ftpClient!=null&&ftpClient.isConnected()) { 
         ftpClient.logout();//退出FTP服务器
            ftpClient.disconnect();//关闭FTP连接
        } 
    }
   
    /**
     * 转移到FTP服务器工作目录
     * @param path
     * @return
     * @throws IOException
     */
    public boolean changeDirectory(String path) throws IOException { 
        return ftpClient.changeWorkingDirectory(path); 
    } 
   
    /**
     * 在服务器上创建目录
     * @param pathName
     * @return
     * @throws IOException
     */
    public boolean createDirectory(String pathName) throws IOException { 
        return ftpClient.makeDirectory(pathName); 
    } 
   
    /**
     * 在服务器上删除目录
     * @param path
     * @return
     * @throws IOException
     */
    public boolean removeDirectory(String path) throws IOException { 
        return ftpClient.removeDirectory(path); 
    } 
     
    /**
     * 删除所有文件和目录
     * @param path
     * @param isAll true:删除所有文件和目录
     * @return
     * @throws IOException
     */
    public boolean removeDirectory(String path, boolean isAll) 
            throws IOException { 
         
        if (!isAll) { 
            return removeDirectory(path); 
        } 
 
        FTPFile[] ftpFileArr = ftpClient.listFiles(path); 
        if (ftpFileArr == null || ftpFileArr.length == 0) { 
            return removeDirectory(path); 
        } 
        //  
        for (FTPFile ftpFile : ftpFileArr) { 
            String name = ftpFile.getName(); 
            if (ftpFile.isDirectory()) { 
             System.out.println("* [sD]Delete subPath ["+path + "/" + name+"]");              
                removeDirectory(path + "/" + name, true); 
            } else if (ftpFile.isFile()) { 
             System.out.println("* [sF]Delete file ["+path + "/" + name+"]");                         
                deleteFile(path + "/" + name); 
            } else if (ftpFile.isSymbolicLink()) { 
 
            } else if (ftpFile.isUnknown()) { 
 
            } 
        } 
        return ftpClient.removeDirectory(path); 
    } 
   
    /**
     * 检查目录在服务器上是否存在 true:存在  false:不存在
     * @param path
     * @return
     * @throws IOException
     */
    public boolean existDirectory(String path) throws IOException { 
        boolean flag = false; 
        FTPFile[] ftpFileArr = ftpClient.listFiles(path); 
        for (FTPFile ftpFile : ftpFileArr) { 
            if (ftpFile.isDirectory() 
                    && ftpFile.getName().equalsIgnoreCase(path)) { 
                flag = true; 
                break; 
            } 
        } 
        return flag; 
    } 
 
    /**
     * 得到文件列表,listFiles返回包含目录和文件,它返回的是一个FTPFile数组
     * listNames():只包含目录的字符串数组
     * String[] fileNameArr = ftpClient.listNames(path);
     * @param path:服务器上的文件目录:/DF4
     */
    public List getFileList(String path) throws IOException { 
        FTPFile[] ftpFiles= ftpClient.listFiles(path); 
        //通过FTPFileFilter遍历只获得文件
/*      FTPFile[] ftpFiles2= ftpClient.listFiles(path,new FTPFileFilter() {
   @Override
   public boolean accept(FTPFile ftpFile) {
    return ftpFile.isFile();
   }
  });  */
        List retList = new ArrayList(); 
        if (ftpFiles == null || ftpFiles.length == 0) { 
            return retList; 
        } 
        for (FTPFile ftpFile : ftpFiles) { 
            if (ftpFile.isFile()) { 
                retList.add(ftpFile.getName()); 
            } 
        } 
        return retList; 
    } 
 
    /**
     * 删除服务器上的文件
     * @param pathName
     * @return
     * @throws IOException
     */
    public boolean deleteFile(String pathName) throws IOException { 
        return ftpClient.deleteFile(pathName); 
    } 
 
    /**
     * 上传文件到ftp服务器
     * 在进行上传和下载文件的时候,设置文件的类型最好是:
     * ftpUtil.setFileType(FtpUtil.BINARY_FILE_TYPE)
     * localFilePath:本地文件路径和名称
     * remoteFileName:服务器文件名称
     */
    public boolean uploadFile(String localFilePath, String remoteFileName) 
            throws IOException { 
        boolean flag = false; 
        InputStream iStream = null; 
        try { 
            iStream = new FileInputStream(localFilePath); 
            //我们可以使用BufferedInputStream进行封装
            //BufferedInputStream bis=new BufferedInputStream(iStream);
            //flag = ftpClient.storeFile(remoteFileName, bis);
            flag = ftpClient.storeFile(remoteFileName, iStream); 
        } catch (IOException e) { 
            flag = false; 
            return flag; 
        } finally { 
            if (iStream != null) { 
                iStream.close(); 
            } 
        } 
        return flag; 
    } 
 
    /**
     * 上传文件到ftp服务器,上传新的文件名称和原名称一样
     * @param fileName:文件名称
     * @return
     * @throws IOException
     */
    public boolean uploadFile(String fileName) throws IOException { 
        return uploadFile(fileName, fileName); 
    } 
 
    /**
     * 上传文件到ftp服务器
     * @param iStream 输入流
     * @param newName 新文件名称
     * @return
     * @throws IOException
     */
    public boolean uploadFile(InputStream iStream, String newName) 
            throws IOException { 
        boolean flag = false; 
        try { 
            flag = ftpClient.storeFile(newName, iStream); 
        } catch (IOException e) { 
            flag = false; 
            return flag; 
        } finally { 
            if (iStream != null) { 
                iStream.close(); 
            } 
        } 
        return flag; 
    } 
 
    /**
     * 从ftp服务器上下载文件到本地
     * @param remoteFileName:ftp服务器上文件名称
     * @param localFileName:本地文件名称
     * @return
     * @throws IOException
     */
    public boolean download(String remoteFileName, String localFileName) 
            throws IOException { 
        boolean flag = false; 
        File outfile = new File(localFileName); 
        OutputStream oStream = null; 
        try { 
            oStream = new FileOutputStream(outfile); 
            //我们可以使用BufferedOutputStream进行封装
          //BufferedOutputStream bos=new BufferedOutputStream(oStream);
          //flag = ftpClient.retrieveFile(remoteFileName, bos);
            flag = ftpClient.retrieveFile(remoteFileName, oStream); 
        } catch (IOException e) { 
            flag = false; 
            return flag; 
        } finally { 
            oStream.close(); 
        } 
        return flag; 
    } 
    /**
     * 从FTP中获取输入流进行文件读取
     */
    public InputStream download(String remoteFileName) 
            throws IOException { 
        InputStream is = null;
        try {
            is = ftpClient.retrieveFileStream(remoteFileName);
        } catch (IOException e) {
         e.printStackTrace();
        }
        return is; 
    }
     
    /**
     * 从ftp服务器上下载文件到本地
     * @param sourceFileName:服务器资源文件名称
     * @return InputStream 输入流
     * @throws IOException
     */
    public InputStream downFile(String sourceFileName) throws IOException { 
        return ftpClient.retrieveFileStream(sourceFileName); 
    }
}

时间: 2024-11-08 23:23:14

从ftp上传下载文件(二)的相关文章

vb60-vb 怎么用winsoc控件 ftp上传下载文件

问题描述 vb 怎么用winsoc控件 ftp上传下载文件 急求 vb 怎么用winsock控件 ftp上传下载文件,还有没有其他的做法,简单就好 解决方案 inet 比较简单,winsock有固定API调用,网上很多 InetFTP.UserName = txtusername.Text InetFTP.Password = txtpassword.Text InetFTP.Execute host_name, "Get logxxxx" Do While InetFTP.Still

python实现的简单FTP上传下载文件实例

  本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. ? 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #!/usr/bin/env python # -*- coding: utf-8

python实现支持目录FTP上传下载文件的方法

  本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. ? 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

php实现ftp上传下载文件的例子

php的代码如下  代码如下 复制代码 $ftp_server='www.111cn.net';//服务器 $ftp_user_name='111cn.net';//用户名 $ftp_user_pass='password';//密码 $ftp_port='21';//端口 $ftp_put_dir='data/photo/thumb/data2';//上传目录 $ftp_conn_id = ftp_connect($ftp_server,$ftp_port); $ftp_login_resul

从ftp上传下载文件(一)

/**   * 从FTP中下载文件至本地路径 remoteFileName FTP服务器上文件名称 localFileName 本地文件名   *   * @return   */  private boolean getFileFromFtp(String remoteFileName, String localFileName)    throws Exception {   boolean flag = false;   FtpConfig ftpConfig = new FtpConfi

JAVA技术实现上传下载文件到FTP服务器(完整)_java

具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

ftp-关于C# 实现FTP上传下载的问题

问题描述 关于C# 实现FTP上传下载的问题 我用C# 从ftp服务器下载一个文件,当下载中断,比如突然断网了,客户端这边要怎么捕捉到异常来关闭下载流呢 解决方案 C#实现FTP上传下载C#实现FTP上传下载功能C#中FTP上传下载 解决方案二: try吧,发生错误,就关掉 解决方案三: 直接try catch,下载断开会触发异常的. 解决方案四: 双线程,一个线程A检测网络连接,另一个线程B负责下载,当线程B检测到断网就给线程A触发事件,A检测到事件发生则做善后处理

c# .net ftp上传下载 解析下载文件数据,然后入库。

问题描述 c# .net ftp上传下载 解析下载文件数据,然后入库. 需求: 把文件上传到ftp然后从ftp下载(这时下载的文件是被人处理后的文件).下载后的文件进行读取验证入库(sqlserver). 目前已经完成的工作:用.net搭建一个框架.(用c#). 还没有完成的工作: ftp上传和下载(ftphelper已经有了). 部分完成的工作:excel和TXT 文件数据的解析,这部分的代码在Vcredit.ExtTrade.BusinessLayer /ComprehensiveBusin

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

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav