Java ftp 上傳文件和下載文件

用到的jar:
commons-net-1.4.1.jar

maven下載

commons-net
commons-net
1.4.1

ftp工具類:
package ftp.ftp2;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpProtocolException;

import java.io.*;
import java.net.SocketException;
import java.util.Properties;

public class FtpUtil {

/**
 * 獲取FTPClient對象
 *
 * @param ftpHost     FTP主機服務器
 * @param ftpPassword FTP 登錄密碼
 * @param ftpUserName FTP登錄用戶名
 * @param ftpPort     FTP端口 默認爲21
 * @return
 */
public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
                                     String ftpPassword, int ftpPort) {
    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient = new FTPClient();
        ftpClient.connect(ftpHost, ftpPort);// 連接FTP服務器
        ftpClient.login(ftpUserName, ftpPassword);// 登陸FTP服務器
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            System.out.println("未連接到FTP,用戶名或密碼錯誤。");
            ftpClient.disconnect();
        } else {
            System.out.println("FTP連接成功。");
        }
    } catch (SocketException e) {
        e.printStackTrace();
        System.out.println("FTP的IP地址可能錯誤,請正確配置。");
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("FTP的端口錯誤,請正確配置。");
    }
    return ftpClient;
}

/*
 * 從FTP服務器下載文件
 *
 * @param ftpHost FTP IP地址
 * @param ftpUserName FTP 用戶名
 * @param ftpPassword FTP用戶名密碼
 * @param ftpPort FTP端口
 * @param ftpPath FTP服務器中文件所在路徑 格式: ftptest/aa
 * @param localPath 下載到本地的位置 格式:H:/download
 * @param fileName 文件名稱
 */
public static void downloadFtpFile(String ftpHost, String ftpUserName,
                                   String ftpPassword, int ftpPort, String ftpPath, String localPath,
                                   String fileName) {

    FTPClient ftpClient = null;

    try {
        ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
        ftpClient.setControlEncoding("UTF-8"); // 中文支持
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.enterLocalPassiveMode();
        ftpClient.changeWorkingDirectory(ftpPath);

        File localFile = new File(localPath + File.separatorChar + fileName);
        OutputStream os = new FileOutputStream(localFile);
        ftpClient.retrieveFile(fileName, os);
        os.close();
        ftpClient.logout();

    } catch (FileNotFoundException e) {
        System.out.println("沒有找到" + ftpPath + "文件");
        e.printStackTrace();
    } catch (SocketException e) {
        System.out.println("連接FTP失敗.");
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("文件讀取錯誤。");
        e.printStackTrace();
    }

}

/**
 * Description: 向FTP服務器上傳文件
 * @param ftpHost FTP服務器hostname
 * @param ftpUserName 賬號
 * @param ftpPassword 密碼
 * @param ftpPort 端口
 * @param ftpPath  FTP服務器中文件所在路徑 格式: ftptest/aa
 * @param fileName ftp文件名稱
 * @param input 文件流
 * @return 成功返回true,否則返回false
 */
public static boolean uploadFile(String ftpHost, String ftpUserName,
                                 String ftpPassword, int ftpPort, String ftpPath,
                                 String fileName,InputStream input) {
    boolean success = false;
    FTPClient ftpClient = null;
    try {
        int reply;
        ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
        reply = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            return success;
        }
        ftpClient.setControlEncoding("UTF-8"); // 中文支持
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.enterLocalPassiveMode();
        ftpClient.changeWorkingDirectory(ftpPath);

        ftpClient.storeFile(fileName, input);

        input.close();
        ftpClient.logout();
        success = true;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
            } catch (IOException ioe) {
            }
        }
    }
    return success;
}

}

package ftp.ftp2;

import java.io.*;

/**

  • Created by jyf on 2017/6/2.
    */
    public class test {
    public static void main(String[] args) {
    String ftpHost = “172.16.114.10”;
    String ftpUserName = “user”;
    String ftpPassword = “a”;
    int ftpPort = 21;
    String ftpPath = “test2/”;
    String localPath = “F:\11.txt”;
    String fileName = “11.txt”;

     //上傳一個文件
     try{
         FileInputStream in=new FileInputStream(new File(localPath));
         boolean test = FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName,in);
         System.out.println(test);
     } catch (FileNotFoundException e){
         e.printStackTrace();
         System.out.println(e);
     }
    
     //在FTP服務器上生成一個文件,並將一個字符串寫入到該文件中
     try {
         InputStream input = new ByteArrayInputStream("test ftp jyf".getBytes("GBK"));
         boolean flag = FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName,input);;
         System.out.println(flag);
     } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
     }
    
     //下載一個文件
     FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
    

    }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章