fjln9eqx39 发表于 2016-6-9 09:08:57

java ftp 上传与下载文件

1. ftp 使用的commons-net-1.4.jar


2.Code



package ftpsrc;

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.FTPReply;

public class FtpManager {

private static FTPClient ftpClient = new FTPClient();
private static boolean isSuccess = false;

/**
* 连接并登录到ftp服务器
* @param ftpUrl:远程ftp地址
* @param port:端口号,默认为21
* @param loginName:登录名称
* @param passWord:登录密码
* @param remotePath:远程目录
* @return
*/
public static boolean connect(String ftpUrl,int port,String loginName,String passWord,String remotePath){
int replyCode = 0;
try {
   //设置编码格式,防止文件名称中出现中文乱码
   ftpClient.setControlEncoding("UTF-8");
   //连接ftp服务器
   ftpClient.connect(ftpUrl, port);
   replyCode = ftpClient.getReplyCode();
   if(FTPReply.isPositiveCompletion(replyCode)){
    //验证登录
    if(ftpClient.login(loginName, passWord)){
   isSuccess = true;
    }
   }else{
    ftpClient.disconnect();
   }
   ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE); // 设置上传文件以二进制上传
   //切换到ftp服务器当前的工作目录
   ftpClient.changeWorkingDirectory(remotePath);
} catch (IOException e) {
   return isSuccess;
}
return isSuccess;
}

/**
* 将本地文件上传到远程ftp服务器
* @param ftpUrl:远程ftp地址
* @param port:端口号,默认为21
* @param loginName:登录名称
* @param passWord:登录密码
* @param remotePath:保存上传文件的远程工作目录
* @param localFile:本地要上传的文件,包含路径信息
*/
public static void uploadFile(String ftpUrl,int port,String loginName,String passWord,String remotePath,String localFile){
File remoteFile = null;
//上传的文件名称,不能包含路径信息,否则无法上传成功
String remoteFileName = "";
InputStream inputStream = null;
boolean success = connect(ftpUrl,port,loginName,passWord,remotePath);
if(success){
   try {
    remoteFile = new File(localFile);
    remoteFileName = remoteFile.getName(); // 设置远程文件名
    inputStream = new FileInputStream(remoteFile);
   
    //开始上传
    ftpClient.storeFile(remoteFileName,inputStream);
    inputStream.close();
    ftpClient.logout();
   } catch (IOException e) {
    throw new RuntimeException(e);
   }finally {
    closeConnect();
   }
}else{
   
}
}

/**
* 从远程ftp服务器上下载文件
* @param ftpUrl:远程ftp地址
* @param port:端口号,默认为21
* @param loginName:登录名称
* @param passWord:登录密码
* @param remotePath:远程工作目录
* @param remoteFileName:要下载的远程文件名,不含路径信息
* @param localPath:保存下载文件的本地目录
*/
public static void downloadFile(String ftpUrl,int port,String loginName,String passWord,String remotePath,String localPath){
File localFile = null;
OutputStream outputStream = null;
boolean success = connect(ftpUrl,port,loginName,passWord,remotePath);
if(success){
   try {
    //获取当前目录下所有的文件名称,不包含子目录
    String[] fileNames = ftpClient.listNames();
    for(String fileName:fileNames){
   localFile = new File(localPath+File.separator+fileName); // File.separator = "\"
      
   outputStream = new FileOutputStream(localFile);
   //开始下载
   ftpClient.retrieveFile(fileName,outputStream);
   //下载完成后删除该文件
   //ftpClient.deleteFile(file);
   outputStream.close();
    }
    ftpClient.logout();
   } catch (IOException e) {
    throw new RuntimeException(e);
   }finally {
    closeConnect();
   }
}else{
   System.out.println("ftp连接失败,请检查用户名和密码是否正确");
}
}

/**
* 关闭与ftp服务器的连接
*/
public static void closeConnect(){
try {
   if (ftpClient != null && ftpClient.isConnected()) {
    ftpClient.disconnect();
   }
} catch (IOException e) {
   throw new RuntimeException(e);
} finally {
   try {
    if(ftpClient != null && ftpClient.isConnected()){   
   ftpClient.disconnect();
    }
   } catch (IOException e) {
    throw new RuntimeException(e);
   }
}
}

public static void main(String[] args){
    downloadFile("ip",21,"username","password","/images/","E:");
    uploadFile("ip",21,"username","password","/images/","d:/aa.gif");// 远程路径要写相对
}
}


注 :
在本地测试的话需要在本地上安装ftp 客户端(leapFTP 在附件中) 和ftp 服务端软件(Serv-U FTP Server V9.0.0.5.rar太大不能上传),服务端的配置该软件有帮助文档自己参考下

leapFTP注册码:

user=www.cnzz.cc
company=FiGHTiNG FOR FUN

key=zBySPvMfL7BK3lTtLKrR3vWR
bRksBfOtj624oBh9ApAYcCFYVPt3
HxhfqUO7uFTrzpAZ7G4wrkklsXFX
aigpYUTAdVJ8XbFAKdn1W1aVtaAR
sJx0+hvvfVDC9+RdhEkBrL7Nfeys
YckjQ1Sd1IvvNKZPwvNkYwVVr6K9
cZzmkY2CJ2yLQ8U8EjYLdeukEi91
PU/Ccr0n5LZAyA4sRkyK4KCuwAQA
1YoNOkBXoLmjoPiL1H4iYTUAfyTn
4c/bTtAFMFWqVcM/sMtstohVT1KU
ljoSRCnRm8UaRdW/mkKoF/yP3N69
MMp5ey4rd1s3FnL/
页: [1]
查看完整版本: java ftp 上传与下载文件