FTP服务端文件下载到本地

import java.awt.image.BufferedImage;
import java.io.File;    
import java.io.FileNotFoundException;    
import java.io.FileOutputStream;    
import java.io.IOException;    
import java.io.OutputStream;    
import java.net.SocketException;    
import java.util.Properties;  

import javax.imageio.ImageIO;

import org.apache.commons.net.ftp.*; 
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

public class DownloadFile {

    /** 
     * 获取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("iso-8859-1"); // 中文支持  
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
            ftpClient.enterLocalPassiveMode();  
            ftpClient.changeWorkingDirectory(ftpPath);  
            FTPFile[] fs = ftpClient.listFiles();  

            for(FTPFile ff:fs){ 
             System.out.println(ff.getName() );            

            }  
           File localFile = new File(localPath + File.separatorChar + fileName);  
           OutputStream os = new FileOutputStream(localFile); 
           if(ftpClient.retrieveFile(new String(fileName.getBytes(),"iso-8859-1") , os))
            System.out.println("YES"); 

           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();  
        }  


    }  


}

mian类

import java.io.File;
import java.io.UnsupportedEncodingException;
public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String ftpHost = "172.22.224.168";  
        String ftpUserName = "ieqpadm";  
        String ftpPassword = "ieqpadm123";  
        int ftpPort = 21;  
        String ftpPath = "/home/ieqpadm/data/test/chenyltest";  
        String localPath = "D:";  
        String  fileName="EQP-信息系统情况汇总-IEM系统 (3).pdf";       
        DownloadFile.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);          
    }

}

下载文件时,出现中文文件查找不到的问题。主要是因为ftp协议中文件名编码方式是”iso-8859-1”,文件名需要转码后去查找。new String(fileName.getBytes(),”iso-8859-1”)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值