Java FTP(Apache)文件上传、下载


ftpjar包下载:http://download.csdn.net/detail/lgq_0714/4216449
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

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

import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
 * @author Administrator
 * @version 1.0
 * @date 2012-3-12
 * @class_displayName FTPUtils
 */

public class FTPUtils {
 /**
  * Description: 向FTP服务器上传文件  通过sun的FtpClient实现上传(为了解决中文文件乱码问题)
  * @param url FTP服务器IP地址
  * @param port  FTP服务器端口
  * @param username FTP登录账号
  * @param password FTP登录密码
  * @param path  FTP服务器保存目录
  * @param originalFileName 原始文件名
  * @param ftpFileName 上传到FTP服务器上的文件名
  * @return 成功返回true,否则返回false
  */
 public static boolean uploadFile(String server, int port, String user,
   String password, String path, String originalFileName,
   String ftpFileName) {
  boolean success = false;
  FtpClient ftpClient;

  try {
   ftpClient = new FtpClient();
   ftpClient.openServer(server,port);
   ftpClient.login(user, password);
   System.out.println("Login .......");

   // path是ftp服务下主目录的子目录
   if (path.length() != 0)
    ftpClient.cd(path);
   
   // 用2进制上传,防止上传中文文件乱码    
   ftpClient.binary();

   TelnetOutputStream os = null;
   FileInputStream is = null;

   os = ftpClient.put(ftpFileName);
   File file_in = new File(originalFileName);
   if (file_in.length() == 0) {
    throw new Exception("上传文件为空!");
   }
   is = new FileInputStream(file_in);
   byte[] bytes = new byte[1024];
   int c;
   while ((c = is.read(bytes)) != -1) {
    os.write(bytes, 0, c);
   }
   is.close();
   os.close();
   success = true;
  } catch (Exception e) {
   e.printStackTrace();
  }

  return success;
 }

 /**
  * Description: 从FTP服务器下载文件   通过Apache的FTPClient实现文件的下载
  * 
  * @param ip FTP服务器的ip地址
  * @param port FTP服务器端口,默认为:21
  * @param username FTP登录账号
  * @param password FTP登录密码
  * @param remotePath FTP服务器上的相对路径
  * @param fileName 要下载的文件名
  * @param localPath 下载后保存到本地的路径
  * @return
  */
 public static boolean downloadFile(String ip, int port, String username,
   String password, String remotePath, String fileName,
   String localPath) {
  boolean success = false;
  FTPClient ftp = new FTPClient();
  try {
   int reply;
   ftp.connect(ip, port);
   // 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
   ftp.setControlEncoding("GBK");
   FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
   conf.setServerLanguageCode("zh");

   // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
   ftp.login(username, password);// 登录
   reply = ftp.getReplyCode();
   if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    return success;
   }

   ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
   FTPFile[] fs = ftp.listFiles();

   for (int i = 0; i < fs.length; i++) {
    FTPFile ff = fs[i];
    if (!ff.getName().equals(".") && !ff.getName().equals("..")) {

     File localFile = new File(localPath + File.separator
       + ff.getName());
     
     if(!localFile.exists())//如果文件已存在则不重复下载
     {
      OutputStream is = new FileOutputStream(localFile);

      // 注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。
      // 原因可能是由于aix系统默认的编码为ISO-8859-1
      ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),
        "ISO-8859-1"), is);
      is.close();
     }
    }
   }

   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   System.out.println("------------------end:"+dateFormat.format(new Date())+"-----------------------------------");
   
   ftp.logout();
   success = true;
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (ftp.isConnected()) {
    try {
     ftp.disconnect();
    } catch (Exception ioe) {
     ioe.printStackTrace();
    }
   }
  }
  return success;
 }

 public static void main(String[] args) {
  try {
   downloadFile("192.168.103.215", 21, "servu", "111111",
     "D:/ftpserv", "测试.xls", "C:/primeton2012/jakarta-tomcat-5.0.28/upload/FEEDBACK_INFO");
   
   // server:FTP服务器的IP地址
   String server = "192.168.103.215";
   // user:登录FTP服务器的用户名
   String user = "servu";
   // password:登录FTP服务器的用户名的口令
   String password = "111111";
   // path:FTP服务器上的路径
   String path = "D:/ftpserv";
   // 要上传本地文件路径
   String originalFileName = "F://Web//Web//src//测试.xls";
   // 上传服务器上文件名
   String ftpFileName = "测试2012-3-12-植树节-.xls";
   
   uploadFile(server, 21, user, password, path, originalFileName, ftpFileName);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值